Вывод даты в две строки с помощью Custom Formatters и Custom Tokens

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

Аватар пользователя gun_dose gun_dose 15 апреля 2014 в 14:13

Сразу оговорюсь:подозреваю, что для простого решения данной проблемы есть какой-то специальный модуль, но, к сожалению, ничего такого я не нашёл.

Задача такая: есть тип материала "Событие", созданный через помощник даты. Хочу, чтобы дата события выводилась красивым квадратиком, где в верхней строке вписано число большим шрифтом, а в нижней более мелким шрифтом написан месяц. В общем, суть в том, чтобы засунуть число в один div, месяц - во второй и т.д.

Для этих дел я установил модуль custom_formatters, чтобы добавить на нужное поле свой форматтер (как советуют на drupal.org). Задал для форматтера тип "HTML и токены", но вот облом: для моего поля даты нет токенов для вывода отдельно числа, месяца и т.д.

На скрине красным я выделил своё поле даты. Для сравнения сразу под ним раскрытое поле даты создания материала.
Я так понимаю, что в моей ситуации надо создать токены, которые "вытянут" из моей даты нужные куски. Для этого я установил модуль token_custom, но не смог разобраться, как писать токен *рукалицо*

В качестве помощи рассмотрю ссылки на модули, которые делают это без танцев с бубном, либо код для нужных токенов. На крайняк сойдёт ссылка на толковый русскоязычный мануал по написанию токенов.

Комментарии

Аватар пользователя juggler39 juggler39 15 апреля 2014 в 17:33

В вашем случае проще обойтись без модулей. В node--событие.tpl.php прописать,
например, так:

<?php echo format_date($node->created, "custom", "F"); ?>

а затем обернуть divом, каким хотите.

Аватар пользователя gun_dose gun_dose 16 апреля 2014 в 9:47

"juggler39" wrote:
В вашем случае проще обойтись без модулей. В node--событие.tpl.php прописать,
например, так:
<?php echo format_date($node->created, "custom", "F"); ?>

Спасибо за совет, но собака оказалась зарыта немного глубже. Дело в том, что я собираюсь выводить не стандартное друпаловское поле даты, а поле, созданное с помощью модуля 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="day">[node:day123]</div>
<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;
?>

В итоге получился форматтер, который можно использовать где угодно, что в принципе и требовалось Smile