Условное выполнение скрипта в представлении Drupal 7
Продолжаем извращаться с различными версиями Drupal и на этот раз на семерке в представлении возникла необходимость выполнения скрипта через условие с PHP.
Изначально была задача следующая — в нодах список выбора, при определенном выбранном значении нужно было в представлении скрывать несколько кнопок выводящихся в поле пользовательского текста.
Итак добавляем глобальное поле PHP в представлении
<?php
$node = node_load($row->nid);
$aviable = $node->field_select_aviable['und']['0']['value'];
if ($aviable == 'notaviable'){
echo '
<script>
(function($){
$(document).ready(function() {
$(\'.tax_node_button_'.$row->nid.'\').addClass(\'hide_buttons\');
});
})(jQuery);
</script>
';
}
?>
Немного рассмотрим, что в этом костыле напихано. Первая строка
$node = node_load($row->nid);
получаем массив текущей ноды по полю айди — $row->nid.
Во-второй строке получаем выставленное значение поля ноды, в нашем случае значение выставленного выбора списка
$aviable = $node->field_select_aviable['und']['0']['value'];
Далее идет обычная проверка условия. Нам нужно скрывать кнопки, если значение поля равно notaviable
if ($aviable == 'notaviable'){
И в случае, если у ноды выставлено это значение выполняем скрипт, который блоку с классом tax_node_button_%id-ноды% добавляет еще один класс — hide_buttons
$(\'.tax_node_button_'.$row->nid.'\').addClass(\'hide_buttons\');
В стилях этому классу можно задать display: none.
Таким образом скрипт у нас будет выполнятся только у нод с совпаденеим значения поля.
Также, возможно пригодиться, отвалился вариант скрипта, который искал на странице скрытый текст нашего поля notaviable и в случае, если такой текст был, элементу добавлялся нужный класс.
<script>
(function($){
$(document).ready(function() {
var content = document.body.textContent || document.body.innerText;
var hasText = content.indexOf("notaviable")!==-1;
if(hasText){
$('.tax_node_button').addClass('hide_buttons');
}
});
})(jQuery);
</script>
Такой вариант больше подойдет для странице на которой выводится одна нода.