Сразу оговорюсь:подозреваю, что для простого решения данной проблемы есть какой-то специальный модуль, но, к сожалению, ничего такого я не нашёл.
Задача такая: есть тип материала "Событие", созданный через помощник даты. Хочу, чтобы дата события выводилась красивым квадратиком, где в верхней строке вписано число большим шрифтом, а в нижней более мелким шрифтом написан месяц. В общем, суть в том, чтобы засунуть число в один div, месяц - во второй и т.д.
Для этих дел я установил модуль custom_formatters, чтобы добавить на нужное поле свой форматтер (как советуют на drupal.org). Задал для форматтера тип "HTML и токены", но вот облом: для моего поля даты нет токенов для вывода отдельно числа, месяца и т.д.
На скрине красным я выделил своё поле даты. Для сравнения сразу под ним раскрытое поле даты создания материала.
Я так понимаю, что в моей ситуации надо создать токены, которые "вытянут" из моей даты нужные куски. Для этого я установил модуль token_custom, но не смог разобраться, как писать токен *рукалицо*
В качестве помощи рассмотрю ссылки на модули, которые делают это без танцев с бубном, либо код для нужных токенов. На крайняк сойдёт ссылка на толковый русскоязычный мануал по написанию токенов.
Комментарии
В вашем случае проще обойтись без модулей. В node--событие.tpl.php прописать,
например, так:
<?php echo format_date($node->created, "custom", "F"); ?>
а затем обернуть divом, каким хотите.
Спасибо за совет, но собака оказалась зарыта немного глубже. Дело в том, что я собираюсь выводить не стандартное друпаловское поле даты, а поле, созданное с помощью модуля Date.
Оказывается, поля created и modified в базе данных сохраняются как штампы времени. Именно поэтому к ним применимы любые функции форматирования. Но поля, созданные модулем Date записываются в БД в виде "2014-04-15 12:45:00". То есть в текстовом. Поэтому все манипуляции с такими датами можно производить только после преобразования strtotime(). Соответственно, кусочек кода, предложенный вами должен выглядеть например так:
<?php $xTime = $node->field_date123['und'][0]['value'];
$xTime = strtotime($xTime);
echo format_date($xTime, "custom", "F"); ?>
Но несмотря на простоту реализации, в вашем способе есть существенный недостаток: он работает только для ноды. А во вьюс его уже не запихнёшь.
Но я всё же вчера смог всё реализовать своим способом. Вот код форматтера:
<div class="month">[node:month-123]</div>
<div class="year">[node:custom-date123]</div>
И вот, как выглядит токен на примере "month-123":
имя токена: month-123
тип: материалы [needs:node]
PHP replacement:
<?php
$ggg = $data['node']->field_date123['und'][0]['value'];
$aDate = strtotime($ggg);
$aDate = getDate($aDate);
$return = t($aDate['month']);
return $return;
?>
В итоге получился форматтер, который можно использовать где угодно, что в принципе и требовалось