home

Как всем документам в подкаталоге изменить какое-либо поле?

Пусть есть некоторый подкаталог и иногда возникает задача массово изменить какое-либо поле в подкаталоге.

Для этого можно создать в любом месте произвольный файл php со следующим кодом и запустить его из командной строки 'php <filename>.php' :

<?php
chdir('/usr/lib64/elis/drupal/');
require_once('drupal.bootstrap.php'); // Запускаем ядро Drupal

$node = node_load('12345'); // node типа 'subj' у которого есть поле $field_name

$filter = array('nodeType'=>array('ebook', 'web')); // типы нод, на которые будем копировать поле. Если хотите скопировать поле на все типы нод, то передайте в фильтр пустой массив $filter = array();

$field_name = 'field_tags'; // Поле, которое копируем с $node на все ноды в подкаталоге типов.

$autosave = true; // Надо ли сохранять ноды или скопировать поля без сохранения

$nodes = ElisHelper::copyFieldToAllNodesOfCatalogTree($node, $field_name, 'replace', $filter, $autosave); // В данном случае $node->field_tags будет скопировано на ноды типа 'ebook' и 'web' в подкаталоге с nid '12345'.

// в $nodes массив всех нод, для которых были изменены поля.

Пример установки метаданных для статей какого-то выпуска научного журнала[править]

Предположим где-то в каталоге с nid '1234' был размещен том '24', выпуск '4' некоторого журнала и при размещении отдельных статей эти метаданные забыли указать.

Но метаданные нужны для правильного размещения в Google Scholar и их следует заполнить.

Тогда можно на ноде каталога заполнит правильно поля field_volume, field_issue, field_serial и произвести массовое копирование этих полей.

<?php 
chdir('/usr/lib64/elis/drupal/');
require_once('drupal.bootstrap.php'); // Запускаем ядро Drupal

$node = node_load('1234');
$filter = array('nodeType'=>array('ebook'));

ElisHelper::copyFieldToAllNodesOfCatalogTree($node, 'field_serial', 'replace', $filter, true);
ElisHelper::copyFieldToAllNodesOfCatalogTree($node, 'field_volume', 'replace', $filter, true);
ElisHelper::copyFieldToAllNodesOfCatalogTree($node, 'field_issue', 'replace', $filter, true);

// ElisHelper::copyFieldToAllNodesOfCatalogTree($node, 'field_open_access', 'replace', $filter, true); // uncomment for Google Scholar.