Як зупинити Drupal для встановлення дати зміни зміни вузла при створенні?


9

Це моє друге питання щодо моїх проблем зі створенням користувацького сценарію міграції.

Я створюю лише нові вузли і не хвилююся оновлень.

Код:

        $node = new stdClass();
        $node->type = 'migrate';
        $node->title = $content['title'];
        $node->language = LANGUAGE_NONE;

        $node->created = (int) date('U',strtotime($content['created']));

        $modified = $content['modified'];               
        if (! empty($modified) && $modified != '0000-00-00 00:00:00') {
            $modified = (int) date('U',strtotime($modified));
        } else {
            $modified = 0;
        }               
        $node->changed = $modified;

        node_object_prepare($node);

        #some lines later
        node_save($node);

Наприклад, для моєї модифікованої $ встановлено 0, і після збереження я бачу оновлений стовпець цього рядка вузла у списку вмісту адміністратора з поточним значенням дати.

Відповіді:


14

Ви повинні мати можливість зберегти початковий changedчас, встановивши власне властивість для об'єкта вузла, скажімо $node->modified, у вашому сценарії міграції перед викликом node_save(), а потім реалізуючи гачок node_presave:

/**
 * Implements hook_node_presave().
 */
function mymodule_node_presave($node) {
  $node->changed = $node->modified;
}

Це буде працювати з node_save()наборів $node->changedдо виклику всіх модулів, які реалізують hook_node_presave().


Так, це працює на 100% :)
Codium

1
Підозрюваний, що мене збивають за це, але якщо я, як ти, ти запускаєш короткочасний сценарій через удар, який не є частиною модуля, і ти не хочеш реалізовувати модуль просто для того, щоб реалізувати гачок тощо. працює db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));після збереження.
artfulrobot

Я ненавиджу, що нам доводиться робити щось таке ж незграбне, як гачок (незручно, оскільки зміна відбувається в абсолютно іншому сегменті коду), але це вина drupal, а не ваша. +1
Кенні Віланд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.