Добрый день!
Помогите новичку. не пинайте строго.
Создал пользовательский тип материала, куда пользователи должны вносить данные.
в пользовательских данных есть два поля с датами ( дата1, дата2).
создал с помощью ССК вывод в виде таблицы. Все нормально.
Вопрос вот в чем. Мне необходимо провести проверку по полям дата (если дата2 > дата1)
в случае если дата2 > дата1 то необходимо поле вывода даты2 закрасить красным в остальных случаях синим.
В программировании на PHP начинающий.
Прошу помощи в какую сторону копать и какие разделы дрюпеля читать????
Комментарии
Читайте template_preprocess_field. В этом хуке делайте проверку даты и добавляйте полю класс.
Ман (EN).
Если можно прошу объяснить подробнее
Данный хук можно вызвать из файла template.php текущей темы. Вам нужна примерно следующая конструкция:
<?php
function ИМЯ_ТЕМЫ_preprocess_field(&$vars) {
$element = $vars['element'];
if ($element['#field_name'] == 'field_ИМЯ_ПОЛЯ') {
if ($element['#items'][0]['value'] == 'С_ЧЕМ_РОВНЯТЬ') {
$vars['classes_array'][] = 'НУЖНЫЙ_КЛАСС';
}
}
}
?>
Соответственно заменить:
Сама конструкция ясна, С_ЧЕМ_РОВНЯТЬ = значение (в данном случае необходимо сравнивать со значением в поле
непонятны сами массивы переменных.
classes_array = нужный класс. (при генерации выводя при просмотре через инспектор в firefoxe таблицы стилей подтягиваются из system.theme.css
беда пока с этими переменными. не вкуриваю я. (((((
Вы уж простите. Действительно мозги вдребезг.
Наше поле обернуто элементом div
изменяю его на div class="colored"
в system.theme.css создаю элемент .colored
со свойством background: red;
соответственно поле красным подсветилось. ( это разбирался с css)
но как это со всеми попадающими под сравнение полями сделать ....????
(соответственно материала пользовательского может быть много).
В данном случае, значение поля находится здесь: $element['#items'][0]['value'].
С_ЧЕМ_РОВНЯТЬ - это значение с которым нужно делать сравнение поля (в примере немного утрировано, приведен пример простейшего сравнения (==), Вам же нужно будет самому составить нужную проверку в соответствии с выполняемой задачей).
Крайне рекомендую освоить данный инструмент разработки. Поможет Вам с пониманием массивов и структуры 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, кликнув на который Вы увидите дерево массива переменных.
В разработке "под Drupal" - считается ОЧЕНЬ плохим тоном внесение правок в ядро и контриб-модули/-темы.
Правильнее - переопределять/дополнять/создавать доп. функционал в своих модулях/темах.
В Вашем случае, нужно добавить CSS-правило в стили текущей темы.
Доброе утро в данном случае я менял не в самом system.theme.css а в инспекторе firefox
хочется чтоб вот так выводило ( пример) не совсем ясна реализация.
Добрый день Антон. Установил Devel
Теперь вижу все переменные и массивы.
Нашет те которые мне нужно.
Но теперь тупик. Они все в Массиве ELEMENT???? (я правильно понимаю)
ТОгда не пойму как обратитья к двум массивам. по имени полю Filed_name??????
И второй вопрос
в самом низу есть
obj StdClass - я так понял это для обращения к объектам????