Как в Drupal изменить все термины из выбранного словаря

1 января 2018 в 10:02
Аватар пользователя Sergey1917 Sergey1917 0 36 Решено

Как в Drupal изменить все термины из выбранного словаря? Вопрос к знатокам.
Пробовал найти решение в инете. Есть только как удалить все термины или вывести.
А нужно просто к каждому термину добавить префикс. Но их много, терминов, и вручную очень долго и муторно.

Может ниже приведенный код поможет решить этот вопрос?
Есть вот такое:

<?phpSET from_str = 'текст', to_str = 'его замена';
UPDATE `field_data_body` SET
  `body_value`   = REPLACE(`body_value`,   from_strto_str),
  `body_summary` = REPLACE(`body_summary`, from_strto_str);
UPDATE `field_revision_body` SET
  `body_value`   = REPLACE(`body_value`,   from_strto_str),
  `body_summary` = REPLACE(`body_summary`, from_strto_str);?>

Может кому и пригодится - как в базе заменить какой-нибудь текст.

Комментарии

Мне нужно добавить префикс к каждому термину одного словаря, а их более 1000. Не смог найти решение. А приведенный код может как-то поможет решить это.

1 января 2018 в 12:01

- Получить термины из словаря - https://api.drupal.org/api/drupal/modules%21taxonomy%21taxonomy.module/f...
- Изменить что надо в них в цикле например foreach
- Сохранить термин https://api.drupal.org/api/drupal/modules%21taxonomy%21taxonomy.module/f...

1 января 2018 в 12:16

Sas@Drupal.Org Не понял вас. Мне нужно название каждого термина определенного словаря изменить, т.е. добавить к названию каждого термина слово, если это возможно. Если нет, то пахать и пахать.

1 января 2018 в 12:53

Тогда зачем все это. Просто изменить и сохранить название термина. Надеялся, может есть программный способ изменить все разом в базе, одним запросом.

1 января 2018 в 18:37

Спасибо! Но моих знаний для этих сложных манипуляций недостаточно. И при этом непонятно, как программно изменить названия рабочих терминов, используя два модуля?

1 января 2018 в 19:04

VasyOK Поставил модуль Views Bulk Operations, к нему еще потребовался модуль Еntity. Никаких новых функций не заметил, настроек у модуля нет. Что с ним делать?

1 января 2018 в 15:03

Вывести все термины и изменить их массово используя токен Названия термина. Возможно VBO пред версии (7x 3.3) потстабильнее будет чем тот, который щас.
https://www.drupal.org/node/1591352 - док.

Еще вариант экспорт терминов, обработка их в экселе, а потом заливка обратно на сайт с пом feeds.

2 января 2018 в 3:18

Не то. Термины не пустые, часть прикреплена к нодам. Просто внести новые термины списком я могу сниппетом. Надо изменить существующие.

1 января 2018 в 18:40
<?php
$myvoc 
taxonomy_vocabulary_machine_name_load'YOUR_VOCAB_NAME';);
$tree taxonomy_get_tree($myvoc->vid);
foreach (
$tree as $term) {
 
$term->name "_".$term->name;
taxonomy_term_save$term);
}
?>

И надеяться что за раз все термины обновятся.

1 января 2018 в 22:06

Voviko Благодарю.
Если я правильно понял в красных кавычках это то, что нужно добавить к названию терминов?
Как проверю - отпишусь.

1 января 2018 в 22:14

Voviko А куда этот код вставлять? Думал это для SQL-запроса к базе данных - не принимает. Вставил в тестовую ноду с включенным режимом PHP - то же не получается.

2 января 2018 в 2:35

Sergey1917 wrote:

Надо изменить существующие.

Этот модуль именно для того, чтобы экспортировать существующие термины в csv-файл, который можно править в текстовом редакторе. В том числе - с помощью регулярных выражений.

А потом - обратно импортировать. И существующие термины обновятся - изменятся на нужные - с префиксом.

Префикс один и тот же добавляется, правильно?

1 января 2018 в 22:30

Этот модуль не изменяет существующие термины, а удаляет и вместо них вставляет новые, с новыми id. А нужно, чтобы старые id сохранились, так как синонимы терминов связаны с id, и карта сайта построена на старых id так же.
Модуль удобен для добавления списка новых терминов, но не для изменения-правки существующих.

2 января 2018 в 2:07

На второй картинке к модулю есть пункт 4:

4. Как импортировать ваши термины?
Что делать с терминами, если такое имя уже есть?:
- Апдейт (замена) существующих терминов...

2 января 2018 в 8:27

Что делать с терминами, если такое имя уже есть?:
- Апдейт (замена) существующих терминов...

Так имя то будет уже другое, с добавкой. При этой опции терминов станет в 2 раза больше - старые и новые суммируются.

2 января 2018 в 10:55

Есть другой способ:

1. Модуль Экспорт данных представлений.
2. Редактирование во внешнем текстовом редакторе (в том числе - с помощью регулярных выражений).
3. Импорт через Feed.

Только не говорите мне, что это не работает. Потому что я сейчас правлю бааальшую таксономию именно этим способом.

Разница в том, что Вам придется установить два модуля и разобраться с их настройкой и работой.
Но Feed - очень полезный модуль. Часто нужен для заливки большого массива материалов на сайт.

2 января 2018 в 8:33

3. Импорт через Feed.

Все то же самое. При импорте создаются новые термины с новыми id, что для моего случая неприемлемо.
Спасибо за желание помочь!

2 января 2018 в 11:53

хм...
При настройке импорта Фиид выбрать процессор Taxonomy term processor

И в маппинге проверить, чтобы было поле Term id (tid).

2 января 2018 в 22:30

Спасибо! Но предложение от Voviko меня вполне устраивает и без лишлих телодвижений все уже сделал. Может если очень много терминов будет он и забуксует, тогда можно и ваш вариант проверить.

2 января 2018 в 23:25

Это ваш код


<?php
$myvoc 
taxonomy_vocabulary_machine_name_load'vse_knigi_khud';);
$tree taxonomy_get_tree($myvoc->8);
foreach (
$tree as $term) {
   
$term->name "_".$term->name;
taxonomy_term_save$term);
}
?>

Это правильный


<?php
$myvoc 
taxonomy_vocabulary_machine_name_load('vse_knigi_khud');
$tree taxonomy_get_tree($myvoc->vid);
foreach (
$tree as $term) {
   
$term->name "_".$term->name;
   
taxonomy_term_save$term);
}
?>

Если вы вставляете код в тело ноды, то! при предпросмотре или просмотре код выполнится.
Вам нужно чтобы код выполнился только один раз, поэтому, вам нужно просматривать ноду только один раз!
а вообще, есть модуль devel у которого есть блок, куда можно вставить код.

2 января 2018 в 12:58

О чем это вы? PHP filter - это системный модуль, из коробки. А код приведенный Voviko вставил в тестовую ноду (просто не опубликованная нода, на которой экспериментирую). Voviko писал:

Если вы вставляете код в тело ноды, то! при предпросмотре или просмотре код выполнится.
Вам нужно чтобы код выполнился только один раз, поэтому, вам нужно просматривать ноду только один раз!

. При этом в ноде включил текстовый формат PHP code.
Вот и все. После предпросмотра удалил в ноде содержимое кода. Как минимум сэкономил для себя неделю мучений.

2 января 2018 в 17:41

Не надо в заголовке писать слово [Решено] Smile
В случае выбора правильного ответа появляется соответствующий значок возле названия темы.

2 января 2018 в 16:47