Всем привет! Стоит задача выдавать автоматически заголовок для содержимого, вида "Документ №ххх от хх.хх.хххх". Нумерацию я делаю с помощью модуля Serial, а дату и собственно автоматический заголовок делаю модулем Automatic entity labels. Все хорошо, но вот нужно чтобы каждый год, глобальный счетчик Serial сбивался в 0, т.е. чтобы в системе было два документа: "Документ №7 от 20.11.2013" и например "Документ №7 от 20.11.2012".
Какие есть мысли по этому поводу?
Комментарии
Каждый год, тридцать первого декабря мы с друзьями
идём в банюищем где хранится значение этого счётчика и сбрасываем его вручную.Думаю не напряжно раз в году руками чето делать.
мало ли вдруг сайт клиентский по схеме сделал и забыл, и каждый год после праздников будут теребить. скорее всего хранит в БД значение посмотрите в таблице "serial_$bundle_$field_name" по крону обнуляйте раз в год и всё.
p.s. я бы сделал совсем по другому:
1) хранить номер последнего документа в переменной
2) при создании документа инкремент переменной и установка заголовка по вашему шаблону
3) в крон каждое первое число в 0:00 сброс переменной в 0
итого 5 функции максимум: hook_node_presave, hook_form_alter, hook_cron, hook_uninstall, hook_install()
кода получилось бы строк 60 не больше
Для удобства и сокращения кода, используй variable_set для записи счетчика переменной, и variable_get для извлечения. Раз в год по крону делай variable_set равной нулю и счётчик будет обнуляться.
Да, все верно, делаю для клиента, поэтому "руками" не вариант.
В базе нашел serial_$bundle_$field_name, не подскажете как добавить задание по обнулению в крон?
Боюсь для меня на данный момент это слишком сложно, да и сроки уже поджимают.
Это будет не легче, чем
Что, скоро 2014?
Нет. Просто скоро, а точнее завтра, выходит шеф который с меня будет спрашивать систему.
Вобщем вкратце прочитал про то, как делается свой модуль, запилил функцию на хук крона (serial_reset_cron), тем самым решив проблему:
//Config
$host = "localhost";
$user = "root";
$password = "";
$database = "drupal";
$current_year = date("Y");
//Connection
$connect = mysql_connect ($host, $user, $password);
mysql_select_db ($database);
//Last cron timestamp
$last_cron = mysql_fetch_array (mysql_query("SELECT MAX(timestamp) FROM watchdog WHERE type='cron';"));
if (date("Y", $last_cron[0]) < $current_year)
{
mysql_query ("TRUNCATE TABLE serial_article_field_serial;"); //Flush counter
}
mysql_close ($connect);
API я не знаю, поэтому сделал так. Всем спасибо за помощь!
жуть то какая, только что умер котенок.
Ок, а как нужно делать?
посмотрите второй комментарий, куда уж подробнее то инструкцию. или мне за вас написать?
Вы описали логику. За какую сумму напишите за меня?
Извините нет возможности такими мелочами заниматься, минут на 15 работы - денег пяток баксов, думаю найдете желающих.
Спасибо за совет.
Дрис Байтаерт, точно бы сейчас упал в обморок!)))
ЗЫСЫЗ PIZDEC!
зафиксирую пост, что-бы было куда ссылать для примеров "ТАК ДЕЛАТЬ НЕЛЬЗЯ!"
так запросы к базе, а дале как советуют выше.
Уже не первый раз вижу, как люди в хуках подобное пишут.
Это ничего котят на всех хватит, главное не напороться на развитие проекта созданного таким живодером.