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

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

Как в 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);?>

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

Лучший ответ

Аватар пользователя voviko voviko 2 января 2018 в 12:58
1

Это ваш код


<?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 у которого есть блок, куда можно вставить код.

Комментарии

Аватар пользователя ivnish ivnish 1 января 2018 в 11:04

Я так и не понял суть поста. Вы задаете вопрос или предлагаете решение?

Аватар пользователя Sergey1917 Sergey1917 1 января 2018 в 12:01

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

Аватар пользователя Sergey1917 Sergey1917 1 января 2018 в 12:53

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

Аватар пользователя sas@drupal.org sas@drupal.org 1 января 2018 в 18:01
1

Я написал алгоритм, после загрузки терминов Вы можете изменить term->name а потом save термин сделать.

Аватар пользователя Sergey1917 Sergey1917 1 января 2018 в 18:37

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

Аватар пользователя Sergey1917 Sergey1917 1 января 2018 в 19:04

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

Аватар пользователя Sergey1917 Sergey1917 1 января 2018 в 15:03

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

Аватар пользователя VasyOK VasyOK 2 января 2018 в 3:18
1

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

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

Аватар пользователя Sergey1917 Sergey1917 1 января 2018 в 18:40

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

Аватар пользователя voviko voviko 1 января 2018 в 22:06
1
<?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);
}
?>

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

Аватар пользователя Sergey1917 Sergey1917 1 января 2018 в 22:14

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

Аватар пользователя Sergey1917 Sergey1917 2 января 2018 в 2:35

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

Аватар пользователя DivaDii DivaDii 1 января 2018 в 22:30
1

Sergey1917 wrote:

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

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

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

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

Аватар пользователя Sergey1917 Sergey1917 2 января 2018 в 2:07

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

Аватар пользователя DivaDii DivaDii 2 января 2018 в 8:27
1

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

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

Аватар пользователя Sergey1917 Sergey1917 2 января 2018 в 10:55

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

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

Аватар пользователя DivaDii DivaDii 2 января 2018 в 8:33
1

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

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

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

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

Аватар пользователя Sergey1917 Sergey1917 2 января 2018 в 11:53

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

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

Аватар пользователя DivaDii DivaDii 2 января 2018 в 22:30
1

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

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

Аватар пользователя Sergey1917 Sergey1917 2 января 2018 в 23:25

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

Аватар пользователя voviko voviko 2 января 2018 в 12:58
1

Это ваш код


<?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 у которого есть блок, куда можно вставить код.

Аватар пользователя Sergey1917 Sergey1917 2 января 2018 в 14:24

Большое спасибо!
Работает. Забыл подключить модуль PHP filter после восстановления базы.

Аватар пользователя ivnish ivnish 2 января 2018 в 17:12

Этот модуль в чёрном списке у друпал разработчиков. Вы же не вставили код прямо в БД?

Аватар пользователя Sergey1917 Sergey1917 2 января 2018 в 17:41

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

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

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

Аватар пользователя Van&#039;Denis Van'Denis 2 января 2018 в 16:47
1

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