Ребята нужна помощь. Помогите сообразить.
Пример:
Есть код, создает форму - 1 чекбокс, кнопка Сохранить.
<?phpfunction test_menu() {
$items['admin/config/system/test'] = array(
'title' => 'Test Module',
'description' => 'Hello, this my first module',
'page callback' => 'drupal_get_form',
'page arguments' => array('test_form'),
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function test_form(){
$form['user_name'] = array(
'#title' => t('Убрать количество комментариев в Тизере...'),
'#type' => 'checkbox',
'#description' => t('Please ckecked'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
return $form;
}
function test_form_validate($form_id,&$form_state) {
//
}
function test_form_submit($form,&$form_state){
//
}
function test_node_view_alter(&$build) {
//
}?>
Если ты ставишь чекбокс, то при нажатие кнопки должно быть типо:
function test_node_view_alter(&$build) {
unsset($build['links']['comment']['#links']['comment-comments']);
}
То есть ссылка в тизере "Кол-во комментариев" исчезает. Снимаешь галку - появляется.
Вот как это должно произойти? Где проверять что checkbox = TRUE? Если TRUE то как то нужно вызвать хук test_node_view_alter(&$build), верно? И что вызывать?
Спасибо. Жду любой помощи.
P.S. Пожалуйста не пишите что это можно все сделать через template или node.tpl.php Я знаю. Я просто не понимаю как форма должна взаимодействовать с "то что должно произойти". Спасибо за понимание.
Комментарии
что мешает на уровне шаблонизатора переменную проверять?
unsset - с одной буквой s.
Это глобальная настройка или для каждого пользователя отдельно?
Глобально. Просто я не доганяю, что должно произойти после того как я отметил чекбокс и нажал сохранить. В голове только мысль что
<?php
function test_node_view_alter(&$build) {
//
}?>
эта функция ловит значение чекбокса и в зависимости TRUE или FALSE делает unset.
Записывайте значение и сохраняйте его. Для глобального использования можно записать в таблицу variables:
<?php
$form['user_name'] = array(
'#title' => t('Убрать количество комментариев в Тизере...'),
'#type' => 'checkbox',
'#description' => t('Please ckecked'),
'#default_value' => variable_get('variable_name', 0),
);
?>
И в алерте проверяйте её:
<?php
function test_node_view_alter(&$build) {
$var = variable_get('variable_name');
if($var == 1){
unset($build['links']['comment']['#links']['comment-comments']);
}
}
?>
Вот теперь стало боле менее ясно))) Спасибо.
Вот только не чего не происходит Должна как то галочка остаться у чекбокса, чтоб типо он равен 1. =\
Сижу с книгой на столе, а в ней толком не написано.
Сохраняйте переменную (значение чекбокса) с помощью variable_set в сабмите, или просто используйте стандартную форму сохранения вместо кнопки:
return system_settings_form($form);
вместо
<?php
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
return $form;
?>
Спасибо. Завтра за тестирую. Отпишусь
Большое спасибо. Вроде все пока получается. Будете у нас на Калыме, милости просим