Как решить задачку?????

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

Аватар пользователя zeon76 zeon76 22 сентября 2016 в 12:39

Добрый день!
Помогите новичку. не пинайте строго.
Создал пользовательский тип материала, куда пользователи должны вносить данные.
в пользовательских данных есть два поля с датами ( дата1, дата2).

создал с помощью ССК вывод в виде таблицы. Все нормально.
Вопрос вот в чем. Мне необходимо провести проверку по полям дата (если дата2 > дата1)
в случае если дата2 > дата1 то необходимо поле вывода даты2 закрасить красным в остальных случаях синим.
В программировании на PHP начинающий.
Прошу помощи в какую сторону копать и какие разделы дрюпеля читать????

Комментарии

Аватар пользователя bumble bumble 22 сентября 2016 в 13:48
2

Данный хук можно вызвать из файла template.php текущей темы. Вам нужна примерно следующая конструкция:

<?php
function ИМЯ_ТЕМЫ_preprocess_field(&$vars) {
  
$element $vars['element'];
  if (
$element['#field_name'] == 'field_ИМЯ_ПОЛЯ') {
    if (
$element['#items'][0]['value'] == 'С_ЧЕМ_РОВНЯТЬ') {
      
$vars['classes_array'][] = 'НУЖНЫЙ_КЛАСС';
    }
  }
}
?>

Соответственно заменить:

  • ИМЯ_ТЕМЫ - на машинное имя текущей темы
  • ИМЯ_ПОЛЯ - на машинное имя поля с датой которое нужно выделить
  • С_ЧЕМ_РОВНЯТЬ - на значение с которым необходимо сравнивать дату
  • НУЖНЫЙ_КЛАСС - на класс, который будет выделять поле
Аватар пользователя zeon76 zeon76 22 сентября 2016 в 14:49

Сама конструкция ясна, С_ЧЕМ_РОВНЯТЬ = значение (в данном случае необходимо сравнивать со значением в поле
непонятны сами массивы переменных.
classes_array = нужный класс. (при генерации выводя при просмотре через инспектор в firefoxe таблицы стилей подтягиваются из system.theme.css
беда пока с этими переменными. не вкуриваю я. (((((
Вы уж простите. Действительно мозги вдребезг.
Наше поле обернуто элементом div
изменяю его на div class="colored"
в system.theme.css создаю элемент .colored
со свойством background: red;
соответственно поле красным подсветилось. ( это разбирался с css)
но как это со всеми попадающими под сравнение полями сделать ....????
(соответственно материала пользовательского может быть много).

Аватар пользователя bumble bumble 22 сентября 2016 в 14:59
2

zeon76 wrote:

Сама конструкция ясна, С_ЧЕМ_РОВНЯТЬ = значение (в данном случае необходимо сравнивать со значением в поле

В данном случае, значение поля находится здесь: $element['#items'][0]['value'].
С_ЧЕМ_РОВНЯТЬ - это значение с которым нужно делать сравнение поля (в примере немного утрировано, приведен пример простейшего сравнения (==), Вам же нужно будет самому составить нужную проверку в соответствии с выполняемой задачей).

zeon76 wrote:

непонятны сами массивы переменных.

Крайне рекомендую освоить данный инструмент разработки. Поможет Вам с пониманием массивов и структуры Drupal в общем.

В качестве упрощенного описания - это модуль-помощник разработчика. Установив данный модуль Вы сможете получить доступ к программной информации (содержание переменных/массивов/объектов и т.п.), а так же к системной информации Drupal (анализ страниц, генерация запросов, реестр хуков...)

Интегрирован с утилитой Krumo (удобный просмотрщик заменяющий print_r / var_dump).

Получить значение переменной можно одной из служебных функций Devel'а, например - dpm().

Конкретно в этом случае, Вы можете использовать ее, например, так:

<?php
function ИМЯ_ТЕМЫ_preprocess_field(&$vars) {
  
$element $vars['element'];
  if (
$element['#field_name'] == 'field_ИМЯ_ПОЛЯ') {
    
dpm($vars); // Выведет весь массив переменных поля
    // dpm($vars['element']); - выведет информацию об элементе
  
}
}
?>

После сохранения, обязательно очистите кеш и обновите страницу на которой присутствует нужное поле. В месте где Друпал выводит сообщения должен появится интерфейс(ы) Krumo, кликнув на который Вы увидите дерево массива переменных.

Аватар пользователя bumble bumble 22 сентября 2016 в 15:14
2

zeon76 wrote:

в system.theme.css создаю элемент .colored

В разработке "под Drupal" - считается ОЧЕНЬ плохим тоном внесение правок в ядро и контриб-модули/-темы.
Правильнее - переопределять/дополнять/создавать доп. функционал в своих модулях/темах.

В Вашем случае, нужно добавить CSS-правило в стили текущей темы.

Аватар пользователя zeon76 zeon76 23 сентября 2016 в 7:39

bumble wrote:

zeon76 написал:

в system.theme.css создаю элемент .colored

В разработке "под Drupal" - считается ОЧЕНЬ плохим тоном внесение правок в ядро и контриб-модули/-темы.
Правильнее - переопределять/дополнять/создавать доп. функционал в своих модулях/темах.
В Вашем случае, нужно добавить CSS-правило в стили текущей темы.


Доброе утро в данном случае я менял не в самом system.theme.css а в инспекторе firefox

Аватар пользователя zeon76 zeon76 23 сентября 2016 в 8:02

bumble wrote:

zeon76 написал:

Сама конструкция ясна, С_ЧЕМ_РОВНЯТЬ = значение (в данном случае необходимо сравнивать со значением в поле

В данном случае, значение поля находится здесь: $element['#items'][0]['value'].

С_ЧЕМ_РОВНЯТЬ - это значение с которым нужно делать сравнение поля (в примере немного утрировано, приведен пример простейшего сравнения (==), Вам же нужно будет самому составить нужную проверку в соответствии с выполняемой задачей).

zeon76 написал:

непонятны сами массивы переменных.

Крайне рекомендую освоить данный  инструмент разработки. Поможет Вам с пониманием массивов и структуры Drupal в общем.
В качестве упрощенного описания - это модуль-помощник разработчика. Установив данный модуль Вы сможете получить доступ к программной информации (содержание переменных/массивов/объектов и т.п.), а так же к системной информации Drupal (анализ страниц, генерация запросов, реестр хуков...)
Интегрирован с утилитой Krumo (удобный просмотрщик заменяющий print_r / var_dump).
Получить значение переменной можно одной из служебных функций Devel'а, например - dpm().
Конкретно в этом случае, Вы можете использовать ее, например, так:

<span style="color: #000000"><span style="color: #0000BB">&lt;?php<br></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">ИМЯ_ТЕМЫ_preprocess_field</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$vars</span><span style="color: #007700">)&nbsp;{<br>&nbsp;&nbsp;</span><span style="color: #0000BB">$element&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$vars</span><span style="color: #007700">[</span><span style="color: #DD0000">'element'</span><span style="color: #007700">];<br>&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$element</span><span style="color: #007700">[</span><span style="color: #DD0000">'#field_name'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'field_ИМЯ_ПОЛЯ'</span><span style="color: #007700">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">dpm</span><span style="color: #007700">(</span><span style="color: #0000BB">$vars</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Выведет&nbsp;весь&nbsp;массив&nbsp;переменных&nbsp;поля<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;dpm($vars['element']);&nbsp;-&nbsp;выведет&nbsp;информацию&nbsp;об&nbsp;элементе<br>&nbsp;&nbsp;</span><span style="color: #007700">}<br>}<br></span><span style="color: #0000BB">?&gt;</span></span>

После сохранения, обязательно очистите кеш и обновите страницу на которой присутствует нужное поле. В месте где Друпал выводит сообщения должен появится интерфейс(ы) Krumo, кликнув на который Вы увидите дерево массива переменных.


Добрый день Антон. Установил Devel
Теперь вижу все переменные и массивы.
Нашет те которые мне нужно.
Но теперь тупик. Smile Они все в Массиве ELEMENT???? (я правильно понимаю)
ТОгда не пойму как обратитья к двум массивам. по имени полю Filed_name??????

И второй вопрос
в самом низу есть
obj StdClass - я так понял это для обращения к объектам????