Вы здесь

Не выводится дата и время

0

Всем доброго дня.

Возникла большая проблема.

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

Есть кусок кода из .tpl.php

if (!empty($content['field_ivent_date']))
foreach(element_children($content['field_ivent_date']) as $k):?>
<div class="scedule">
<div class="date"><?php echo $content['field_ivent_date'][$k]['#markup'][0];?>&nbsp;</div>
<div class="time"><?php echo $content['field_ivent_date'][$k]['#markup'][1];?> - <?php echo $content['field_ivent_date'][$k]['#markup'][2];?></div>
<div class="price"><?php echo $cost;?></div>
<div class="adres"><?php echo $adres;?></div>
<div class="clear"></div>
</div>
<?php endforeach;?>

Поле field_ivent_date типа date

Строки

<div class="date"><?php echo $content['field_ivent_date'][$k]['#markup'][0];?>&nbsp;</div>
<div class="time"><?php echo $content['field_ivent_date'][$k]['#markup'][1];?> - <?php echo $content['field_ivent_date'][$k]['#markup'][2];?></div>

должны выводить дату и время указанную в поле при создании материала
Но загвоздка в том что не выводят.

Версия Drupal: 
7.x
Категория: 
Field APITheming
Вопрос задан 25.09.2015 - 13:33

$content['field_ivent_date']
это render array и делать так как у вас - мовитон.
версия модуля date какая у вас?
и какой имено .tpl.php

Комментарий оставлен 25.09.2015 - 14:49

это render array и делать так как у вас - мовитон.

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

версия модуля date какая у вас?

7.x-2.9

и какой имено .tpl.php

node--ivent.tpl.php - видно что индивидуальная страница под материал

Комментарий оставлен 25.09.2015 - 15:09

Тип поля какой?
Date, Date (Unix timestamp), Date (ISO format)?

Комментарий оставлен 25.09.2015 - 16:00

Ответы

1

1) Используй переменную $node вместо $content.

$node->field_ivent_date

, если тебе нужно получить значение полей то прочитай http://drupalace.ru/lesson/korrektnaya-rabota-s-polyami-v-sedmom-drupale...

$field_values = field_get_items('node', $node, 'field_ivent_date');

2) Вынеси логику из .tpl.php в template.php.
Для этого можно использовать template_preprocess_node().

Ответ дан 25.09.2015 - 16:12

О-о-о вроде бы что-то вывести получилось...
Вот только выводит значение не в дате а цифровом аспекте. А как применить формат даты?

P.s.: Ребят, огромное спасибо. Без Вас не справилась бы, т.к. в данном аспекте познания не слишком глубокие :(

Комментарий оставлен 25.09.2015 - 16:42
1

Вам надо включить модуль Devel и в шаблоне написать <?php dpm($content['field_ivent_date']); ?>
На странице сайта будет видно что вообще в этих массивах и есть ли они.
Судя по тому, что ни поля, ни ошибки об отсутствии [$k]['#markup'] не выводятся, значит условие if (!empty($content['field_ivent_date'])) не выполнилось.

Ответ дан 25.09.2015 - 14:11

Сразу не заметил: ['#markup'] обычно не массив, а конечный html. А в коде ['#markup'][0].
Надо посмотреть структуру массива через devel.

Комментарий оставлен 25.09.2015 - 14:29

Условие выполняется, т.к. переменные $cost и $adres на экран выводятся

По Вашему совету добавила

<?php dpm($content['field_ivent_date']); ?>

Получила следующую информацию:

  • #theme (String, 5 characters ) field
  • #weight (String, 1 characters ) 3
  • #title (String, 29 characters ) Дата проведения
  • #access (Boolean) TRUE
  • #label_display (String, 6 characters ) hidden
  • #view_mode (String, 4 characters ) full
  • #language (String, 3 characters ) und
  • #field_name (String, 16 characters ) field_ivent_date
  • #field_type (String, 9 characters ) datestamp
  • #field_translatable (String, 1 characters ) 0
  • #entity_type (String, 4 characters ) node
  • #bundle (String, 5 characters ) ivent
  • #object (Object) stdClass
  • #items (Array, 1 element)
  • #formatter (String, 12 characters ) date_default
  • 0 (Array, 1 element)
Комментарий оставлен 25.09.2015 - 14:32

Да. Это содержимое $content['field_ivent_date'].
Т.е. существуют элементы $content['field_ivent_date']['#theme'], $content['field_ivent_date']['#weight'], $content['field_ivent_date']['#title'] и т. д.

Теперь на странице кликните на элемент [ 0 (Array, 1 element) ]
Раскроются элементы массива $content['field_ivent_date'][0]

И так далее надо проследить структуру массива и верно ли обращаетесь ли вы к нему в коде.

Если что-то не понятно - уточняйте.

Комментарий оставлен 25.09.2015 - 14:46
  • #markup (Array, 0 elements)
  • $...[0]['#markup']

Если я правильно понимаю, то у '#markup' нет элементов а поэтому выводить нечего. А почему?

Комментарий оставлен 25.09.2015 - 15:03

Да, он пуст.
Вообще странно, что #markup - это массив.
Надо определить откуда он идет
Посмотрите в template.php
Нету ли там манипуляций с этим полем в функциях THEME_preprocess_*
Или в кастомном модуле может быть что-то переделывали.

Комментарий оставлен 25.09.2015 - 15:54

В template.php действительно идет манипуляция:

case 'ivent':
            $t=time();
            if (!empty($vars['content']['field_ivent_date']))
            foreach(element_children($vars['content']['field_ivent_date']) as $k)
            {
                if ($vars['content']['field_ivent_date']['#items'][$k]['value']<$t)
                {
                    unset($vars['content']['field_ivent_date'][$k]);
                    continue;
                }
                $date=$vars['content']['field_ivent_date'][$k]['#markup'];

                preg_match('#<span.*?>(.*?)-.*?<span.*?>(.*?)</span>.*s?<span.*?>(.*?)</span></span>#imsu',$date,$res);

                array_shift($res);
                $vars['content']['field_ivent_date'][$k]['#markup']=$res;
                //kprint_r($res);
                //kprint_r($vars['content']['field_ivent_date']);
            }
            // форма записи на семенар .. 

            //kprint_r($snform);
            //$vars['content']['sapis-form']=$snform;
            $vars['content']['view-other-semenars']=views_embed_view('ivens','page',$vars['nid']);
//webform_client_form_1068  

        break;
Комментарий оставлен 25.09.2015 - 16:22