Массовое изменение даты публикации материала

Главные вкладки

Аватар пользователя varovae varovae 29 июля 2019 в 19:42

Есть ли какой нибудь модуль или другое доступное новичку решение которое может обновлять дату публикации (не обновление, а именно публикации)материала. Например, все что старше 3 лет - менять дату на сегодняшнюю. Желательно конечно чтобы обновление даты происходило без моего каждодневного участия.
PS. Как делать вручную заходя в каждый материал знаю.
Спасибо.

Лучший ответ

Аватар пользователя Skerth Skerth 31 июля 2019 в 15:58
1

Примерно так:

<?php
/**
 * Implements hook_cron().
 */
function mymodule_cron() {
  
db_update('node')
  ->
fields(array('created' => time()))
  ->
condition('created'time() - 94608000'<')
  ->
execute();
}
?>

Комментарии

Аватар пользователя ivnish ivnish 29 июля 2019 в 19:44

А какой в этом смысл?

Если вам это очень нужно, то это быстро и просто сделать с помощью sql запроса прямо в БД.

Так же с этим, возможно, могут помочь модули типа VBO (но это не точно)

Аватар пользователя VasyOK VasyOK 29 июля 2019 в 20:42

Я не знаю что такое RSS маленьким был когда это актуально было, но когда на некоторых сайтах настраивал подобное - делал вьюху, в которую выводил все что нужно сеонистам. А там уже сортировку, легко настроить. Можете это сделать?

Аватар пользователя Skerth Skerth 29 июля 2019 в 21:39

Можно сделать событие по крону в связке Rules (+rules_conditional) и VBO. На 7-ке это хорошо работает, я так делаю именную рассылку пользователям, чьи объявления на сайте старше 30 дней. Без строчки кода.
Примерно так делаем:
1. Создаем Views с нужным фильтром. В данном случае ноды старше 3 лет (now -36 month). Подключаем к нему поле "Глобальные операции" (VBO).
2. Далее создаем правило в Rules с запуском по крону. В него делаем загрузку Views из предыдущего шага.
3. После чего в цикле обрабатываем каждый материал из Views и ставим текущую дату.

P.s. Но проще сделать модуль с парой строк кода, чтобы через запрос к базе обновлять все нужные ноды.

Аватар пользователя varovae varovae 29 июля 2019 в 22:34

Skerth wrote:
Но проще сделать модуль с парой строк кода

это для меня вообще недостижимо. с views знакома, но вот попытки последних пары дней освоить rules и vbo пока никуда не привели. буду двигаться дальше

Аватар пользователя varovae varovae 29 июля 2019 в 22:30

спасибо за ответы! попытаюсь разобраться хоть в чем-то, теперь хотя бы общее направление движения понятно

Аватар пользователя Skerth Skerth 30 июля 2019 в 1:02

Не за что.
Все же, лучше двигаться в сторону своего модуля.
В нем использовать: HOOK_cron В котором написать простой SQL запрос на обновление.

Это решение будет самым производительным.

Аватар пользователя varovae varovae 31 июля 2019 в 9:24

С тем, какой должен быть запрос вроде разобралась. Если я его ввожу непосредственно на хостинге, он работает как надо. Вы не могли бы подсказать, как его правильно вставить в mymodule.module? Если я правильно понимаю, то надо сначала сделать так, чтобы модуль подключился к базе данных?

Аватар пользователя Skerth Skerth 31 июля 2019 в 15:58
1

Примерно так:

<?php
/**
 * Implements hook_cron().
 */
function mymodule_cron() {
  
db_update('node')
  ->
fields(array('created' => time()))
  ->
condition('created'time() - 94608000'<')
  ->
execute();
}
?>
Аватар пользователя VasyOK VasyOK 29 июля 2019 в 23:07

Вот инструкция как с views ленту сделать
https://yalesites.yale.edu/book/creating-rss-feed-views

порядок того, что выводится можно настроить через модуль weight либо проще: во вьюхе Критерий сортировки - Содержимое закреплено. И закрепляйте нужную ноду в начале вывода.

Аватар пользователя Skerth Skerth 30 июля 2019 в 1:03

Как я понял ТС нужно именно обновлять даты у материалов, чтобы старые появлялись над новыми. Я сам в онлайн-журнале периодически обновляю даты создания.
Стандартными сортировками так не сделать.