Собственно тема: как сделать checkbox "отметить все"?
Например, есть cck-поле Текст -> Checkboxes/Radio Buttons, в настройках выбрано "не ограничено"
В нём стоят ключ|значение
Больше никак. У меня заработал этот скриптец, но:
Нельзя поставить русский язык
Отображается на странице с материалом "Check all". Если завернуть в div/span - получается фигня
Для первого случая. Возможно, здесь можно обойтись и без дивов. $(”чекбокс:first”). Ну или с помощью указания номера (eq)
Для второго случая: а этот параметр name с помощью append нельзя добавить?
В теле странице, при просмотре исходного кода видим такую картину:
<inputtype="checkbox"class="form-checkbox"checked="checked"value="Firefox"id="edit-field-website-crossbrowse-value-Firefox"name="field_website_crossbrowse[value][Firefox]"/> Mozilla Firefox
<inputtype="checkbox"class="form-checkbox"checked="checked"value="Opera"id="edit-field-website-crossbrowse-value-Opera"name="field_website_crossbrowse[value][Opera]"/> Opera
you can implement hook_alter_form() to add this property to existing forms. Example: '#checkall' =>TRUE, // <--- this is it ;-)
то есть пишешь модулек, там альтеришь вот этим.
/**
* Implementation of hook_form_alter()
*/ function cck_allcbxs_form_alter(&$form, &$form_state, $form_id){ // cck_allcbxs - это название модуля // form_alter - это hook_form_alter, соотвествтенно друпал будет вызывать его // когда построит форму.
if($form_id == 'page_node_form'){ // Чтобы узнать какой у вас form_id // Открой страницу с формой, ищи такую строку с name="form_id": // <input type="hidden" name="form_id" id="edit-page-node-form" value="page_node_form" /> // где value и есть form_id, в данном случае page_node_form
$form['field_test_cbxs']['#checkall'] = TRUE; // Тут я нашел свой элемент через d($form); (см.функцию внизу) // а можно опять в же в html коде формы, найди что-то похожее на это: // <input type="checkbox" name="field_test_cbxs[value][1]" id="edit-field-test-cbxs-value-1" value="1" class="form-checkbox" /> // в данном случае название элемента - это будет field_test_cbxs из name
// Можешь проверить что нашел нужный элемент так: // убери коммент с нижней строки, // замени название элемента на свой // и обнови страницу с формой // d($form['field_test_cbxs']); // если печатает структуру, то ты его нашел } }
/**
* Просто вывод структур php (у devel лучше, но каждый раз его ставить тоже неохота, модуль тяжелый)
*/ function d($var){ $result = '<div style="font-size:10px;overflow:visible;margin:0;padding:0;"><pre>'.check_plain(print_r($var,1)).'</pre></div>'; drupal_set_message($result); }
Как видишь, модуль на самом деле состоит из 5 основных строчек и двух файлов, проще не бывает.
Все эти хитрости потому что модуль checkall довольно универсальный, можете посмотреть в тестовом модуле (checkall_example).
я бы сам проще написал свой jquery, а так, хотя бы поймете как модули делать.
Комментарии
Тоже интересно. Возможно, только через jquery примочку
Нельзя поставить русский язык
Отображается на странице с материалом "Check all". Если завернуть в div/span - получается фигня
Есть такой, но он требует имени
Удалено за непригодностью
Для первого случая. Возможно, здесь можно обойтись и без дивов. $(”чекбокс:first”). Ну или с помощью указания номера (eq)
Для второго случая: а этот параметр name с помощью append нельзя добавить?
Имеем поле Crossbrowse, ключи и значения:
Opera|Opera
Flock|Flock
....................
В теле странице, при просмотре исходного кода видим такую картину:
<input type="checkbox" class="form-checkbox" checked="checked" value="Opera" id="edit-field-website-crossbrowse-value-Opera" name="field_website_crossbrowse[value][Opera]"/> Opera
<input type="checkbox" class="form-checkbox" checked="checked" value="Flock" id="edit-field-website-crossbrowse-value-Flock" name="field_website_crossbrowse[value][Flock]"/> Flock
..............................
ааа. Тогда в чем вопрос? Если имя есть, тогда у вас все как во втором случае
http://drupal.org/project/checkall ?
you can implement hook_alter_form() to add this property to existing forms. Example:
'#checkall' => TRUE, // <--- this is it ;-)
то есть пишешь модулек, там альтеришь вот этим.
Про модулёк я понял, без него никак не обойтись?
hook_form_alter() в template.php должен вроде прокатывать
Спасибо! Поищу на d.org
не прокатит.
ууух, ну давай один раз поальструистничаю
установи вышеуказанный модуль, и добавь следующий, вот главное тело:
// $Id$
/**
* file
*/
/**
* Implementation of hook_form_alter()
*/
function cck_allcbxs_form_alter(&$form, &$form_state, $form_id) {
// cck_allcbxs - это название модуля
// form_alter - это hook_form_alter, соотвествтенно друпал будет вызывать его
// когда построит форму.
if ($form_id == 'page_node_form') {
// Чтобы узнать какой у вас form_id
// Открой страницу с формой, ищи такую строку с name="form_id":
// <input type="hidden" name="form_id" id="edit-page-node-form" value="page_node_form" />
// где value и есть form_id, в данном случае page_node_form
$form['field_test_cbxs']['#checkall'] = TRUE;
// Тут я нашел свой элемент через d($form); (см.функцию внизу)
// а можно опять в же в html коде формы, найди что-то похожее на это:
// <input type="checkbox" name="field_test_cbxs[value][1]" id="edit-field-test-cbxs-value-1" value="1" class="form-checkbox" />
// в данном случае название элемента - это будет field_test_cbxs из name
// Можешь проверить что нашел нужный элемент так:
// убери коммент с нижней строки,
// замени название элемента на свой
// и обнови страницу с формой
// d($form['field_test_cbxs']);
// если печатает структуру, то ты его нашел
}
}
/**
* Просто вывод структур php (у devel лучше, но каждый раз его ставить тоже неохота, модуль тяжелый)
*/
function d($var) {
$result = '<div style="font-size:10px;overflow:visible;margin:0;padding:0;"><pre>'.check_plain(print_r($var,1)).'</pre></div>';
drupal_set_message($result);
}
Как видишь, модуль на самом деле состоит из 5 основных строчек и двух файлов, проще не бывает.
Все эти хитрости потому что модуль checkall довольно универсальный, можете посмотреть в тестовом модуле (checkall_example).
я бы сам проще написал свой jquery, а так, хотя бы поймете как модули делать.
Всё сделал, но ничего не происходит. Что вообще должно появится?
$form_id == 'website_node_form'
$form['field-website-crossbrowse']
хмм, люди чем мне еще помочь? help me!
Nikit, спасибо! Я забил на эту идею