[Решено] Автоматическое снятие с публикации

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

Аватар пользователя Cristian Cristian 6 марта 2013 в 18:16

Нужно дать возможность пользователю устанавливать срок публикации материала (у ноды есть поле типа селект со значениями: 1 день, 2 дня... и т.д). Посмотрел модуль Auto Expire, там одно правило применяется ко всем нодам выбранного типа, а не для каждой отдельной ноды, как нужно мне.
Решил сделать с помощью Sheduler и Rules. Но возникла проблема с составлением правила.
Собственно, как в rules указать, что после сохранения материала, следует заполнить поле Unpublish on в свойствах ноды? Желательно с возможностью php кода, так как значение нужно вычислять на основе значения другого поля. Я просто не нашел в экшене rules параметров для sheduler.

Комментарии

Аватар пользователя relevate relevate 7 марта 2013 в 2:14

"xSPiRiTx" wrote:
он уже видел

Я думаю, что ТС упомянул стандартную связку Sheduler+Rules из базового ф-ционала, которая позволяет делать много чего автоматически по расписаниям, но даже написание скрипта по публикации/снятию этим методом будет требовать гораздо больше времени и знаний, нежели чем использование готового модуля, который предложил я.

Аватар пользователя drupby drupby 7 марта 2013 в 2:36

"Cristian" wrote:
Собственно, как в rules указать, что после сохранения материала, следует заполнить поле Unpublish on в свойствах ноды?

а зачем после сохранения материала что то делать - тут надо по крону к примеру проверять опубликованные ноды и смотреть
if (текущее время - время создания ноды > значения селект поля , переведенного unix формат ) выполнить действие - $node->status = 0
и вот это тоже должно помочь - там не совсем по такому принципу делают но глаза на суть решения откроет

Аватар пользователя Cristian Cristian 7 марта 2013 в 10:29

Дело в том, что я как раз и использую модуль Scheduler. Он добавляет в настройки материала поле Unpublish on, а затем сам по крону снимает материалы, где эта дата меньше текущей.

Просто у меня есть поле материала (Срок публикации), которое заполняет пользователь, и мне каким-то образом нужно перенести значение этого поля в поле Unpublish on.

Я думал, это можно сделать через Rules, чтобы не писать свой модуль. Но не смог разобраться как.

Аватар пользователя Cristian Cristian 12 марта 2013 в 10:10

Создаем новый модуль. В нем пишем:

<?php
/**
 * Implementation hook_node_presave()
 */
function MODULE_node_presave($node) {
    
    
$node->unpublish_on 'timestamp нужной даты';

}

?>

Так как у меня была задача сделать зависимость от другого поля, я написал так:

<?php
/**
 * Implementation hook_node_presave()
 */
function MODULE_node_presave($node) {

    

// если поле заполнено
    
if (!empty($node->field_lifetime['und'][0]['value'])) {
        
// получаем его значение
        
$field $node->field_lifetime['und'][0]['value'];
        
// преобразоваем в timestamp и записываем в поле Unpublish on
        
$node->unpublish_on strtotime('+' $field$node->created);
    }

}

?>

Поле field_lifetime обычный список вида:

1 day|1 день
1 week|1 неделя
1 month|1 месяц

Аватар пользователя sg32 sg32 23 августа 2014 в 20:11

[quote=Cristian]Создаем новый модуль. В нем пишем:

<?php
function MODULE_node_presave($node) {

    

// если поле заполнено
    
if (!empty($node->field_lifetime['und'][0]['value'])) {
        
// получаем его значение
        
$field $node->field_lifetime['und'][0]['value'];
        
// преобразоваем в timestamp и записываем в поле Unpublish on
        
$node->unpublish_on strtotime('+' $field$node->created);
    }

?>

У меня почему то по крону, материал снимается с публикации, но данная операция идет по кругу, т.е. unpublish_on увеличивается на предидущие значение.

Аватар пользователя drupby drupby 11 марта 2013 в 20:40

"Cristian" wrote:
Так как у меня была задача сделать зависимость от другого поля

а поле-селект имеет тип date ?

Аватар пользователя Cristian Cristian 12 марта 2013 в 0:12

"drupby" wrote:
а поле-селект имеет тип date ?

Нет, у меня просто список вида "1 day|1 день". Но это не принципиально. Поскольку, мы сами в php обрабатываем данные, тип поля может быть любым.

Аватар пользователя iNFerNo iNFerNo 12 марта 2013 в 8:41

"Cristian" wrote:
Поскольку, мы сами в php обрабатываем данные, тип поля может быть любым.

если что интерсует как раз это как и где вы это обрабатываете...

решение то приведите работающие...