Как в Drupal изменить все термины из выбранного словаря? Вопрос к знатокам.
Пробовал найти решение в инете. Есть только как удалить все термины или вывести.
А нужно просто к каждому термину добавить префикс. Но их много, терминов, и вручную очень долго и муторно.
Может ниже приведенный код поможет решить этот вопрос?
Есть вот такое:
<?phpSET from_str = 'текст', to_str = 'его замена';
UPDATE `field_data_body` SET
`body_value` = REPLACE(`body_value`, from_str, to_str),
`body_summary` = REPLACE(`body_summary`, from_str, to_str);
UPDATE `field_revision_body` SET
`body_value` = REPLACE(`body_value`, from_str, to_str),
`body_summary` = REPLACE(`body_summary`, from_str, to_str);?>
Может кому и пригодится - как в базе заменить какой-нибудь текст.
Комментарии
Я так и не понял суть поста. Вы задаете вопрос или предлагаете решение?
Мне нужно добавить префикс к каждому термину одного словаря, а их более 1000. Не смог найти решение. А приведенный код может как-то поможет решить это.
- Получить термины из словаря - https://api.drupal.org/api/drupal/modules%21taxonomy%21taxonomy.module/f...
- Изменить что надо в них в цикле например foreach
- Сохранить термин https://api.drupal.org/api/drupal/modules%21taxonomy%21taxonomy.module/f...
Sas@Drupal.Org Не понял вас. Мне нужно название каждого термина определенного словаря изменить, т.е. добавить к названию каждого термина слово, если это возможно. Если нет, то пахать и пахать.
Я написал алгоритм, после загрузки терминов Вы можете изменить term->name а потом save термин сделать.
Тогда зачем все это. Просто изменить и сохранить название термина. Надеялся, может есть программный способ изменить все разом в базе, одним запросом.
Это алгоритм для программного способа.
Спасибо! Но моих знаний для этих сложных манипуляций недостаточно. И при этом непонятно, как программно изменить названия рабочих терминов, используя два модуля?
???
Это код для кастомного модуля, например его можно выполнять из настроек по кнопке.
https://www.drupal.org/project/views_bulk_operations не?
VasyOK Поставил модуль Views Bulk Operations, к нему еще потребовался модуль Еntity. Никаких новых функций не заметил, настроек у модуля нет. Что с ним делать?
Вывести все термины и изменить их массово используя токен Названия термина. Возможно VBO пред версии (7x 3.3) потстабильнее будет чем тот, который щас.
https://www.drupal.org/node/1591352 - док.
Еще вариант экспорт терминов, обработка их в экселе, а потом заливка обратно на сайт с пом feeds.
Может, проще всего вот этот модуль?
Экспорт/импорт таксономии.
И добавить префикс в любом тупом текстовом редакторе.
Не то. Термины не пустые, часть прикреплена к нодам. Просто внести новые термины списком я могу сниппетом. Надо изменить существующие.
<?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);
}?>
И надеяться что за раз все термины обновятся.
Voviko Благодарю.
Если я правильно понял в красных кавычках это то, что нужно добавить к названию терминов?
Как проверю - отпишусь.
Voviko А куда этот код вставлять? Думал это для SQL-запроса к базе данных - не принимает. Вставил в тестовую ноду с включенным режимом PHP - то же не получается.
Voviko А vid словаря надо в код вставлять? Или только машинное имя словаря?
Этот модуль именно для того, чтобы экспортировать существующие термины в csv-файл, который можно править в текстовом редакторе. В том числе - с помощью регулярных выражений.
А потом - обратно импортировать. И существующие термины обновятся - изменятся на нужные - с префиксом.
Префикс один и тот же добавляется, правильно?
Да, один и тот же.
Этот модуль не изменяет существующие термины, а удаляет и вместо них вставляет новые, с новыми id. А нужно, чтобы старые id сохранились, так как синонимы терминов связаны с id, и карта сайта построена на старых id так же.
Модуль удобен для добавления списка новых терминов, но не для изменения-правки существующих.
На второй картинке к модулю есть пункт 4:
Так имя то будет уже другое, с добавкой. При этой опции терминов станет в 2 раза больше - старые и новые суммируются.
Есть другой способ:
1. Модуль Экспорт данных представлений.
2. Редактирование во внешнем текстовом редакторе (в том числе - с помощью регулярных выражений).
3. Импорт через Feed.
Только не говорите мне, что это не работает. Потому что я сейчас правлю бааальшую таксономию именно этим способом.
Разница в том, что Вам придется установить два модуля и разобраться с их настройкой и работой.
Но Feed - очень полезный модуль. Часто нужен для заливки большого массива материалов на сайт.
Все то же самое. При импорте создаются новые термины с новыми id, что для моего случая неприемлемо.
Спасибо за желание помочь!
хм...
При настройке импорта Фиид выбрать процессор Taxonomy term processor
И в маппинге проверить, чтобы было поле Term id (tid).
Спасибо! Но предложение от Voviko меня вполне устраивает и без лишлих телодвижений все уже сделал. Может если очень много терминов будет он и забуксует, тогда можно и ваш вариант проверить.
Это ваш код
<?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 у которого есть блок, куда можно вставить код.
Большое спасибо!
Работает. Забыл подключить модуль PHP filter после восстановления базы.
Этот модуль в чёрном списке у друпал разработчиков. Вы же не вставили код прямо в БД?
О чем это вы? PHP filter - это системный модуль, из коробки. А код приведенный Voviko вставил в тестовую ноду (просто не опубликованная нода, на которой экспериментирую). Voviko писал:
. При этом в ноде включил текстовый формат PHP code.
Вот и все. После предпросмотра удалил в ноде содержимое кода. Как минимум сэкономил для себя неделю мучений.
Не надо в заголовке писать слово [Решено]
В случае выбора правильного ответа появляется соответствующий значок возле названия темы.
ОК.