CCK checkboxes: отметить все

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

Аватар пользователя Stan.Ezersky Stan.Ezersky 2 декабря 2009 в 6:26

Собственно тема: как сделать checkbox "отметить все"?
Например, есть cck-поле Текст -> Checkboxes/Radio Buttons, в настройках выбрано "не ограничено"
В нём стоят ключ|значение

Как добавить ещё и checkbox "Отметить/Снять всё"?

Комментарии

Аватар пользователя Stan.Ezersky Stan.Ezersky 2 декабря 2009 в 7:01

"digital_sword" wrote:
Возможно, только через jquery примочку
Больше никак. У меня заработал этот скриптец, но:
Нельзя поставить русский язык
Отображается на странице с материалом "Check all". Если завернуть в div/span - получается фигня

Есть такой, но он требует имени

Аватар пользователя digital_sword digital_sword 2 декабря 2009 в 7:34

Для первого случая. Возможно, здесь можно обойтись и без дивов. $(”чекбокс:first”). Ну или с помощью указания номера (eq)
Для второго случая: а этот параметр name с помощью append нельзя добавить?

Аватар пользователя Stan.Ezersky Stan.Ezersky 2 декабря 2009 в 7:46

"digital_sword" wrote:
а этот параметр name с помощью append нельзя добавить?
А он есть. Вот пример с Drupalogy.ru
Имеем поле Crossbrowse, ключи и значения:

Firefox|Firefox
Opera|Opera
Flock|Flock
....................

В теле странице, при просмотре исходного кода видим такую картину:

<input type="checkbox" class="form-checkbox" checked="checked" value="Firefox" id="edit-field-website-crossbrowse-value-Firefox" name="field_website_crossbrowse[value][Firefox]"/> Mozilla Firefox

<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

..............................

Аватар пользователя Nikit Nikit 3 декабря 2009 в 15:00

you can implement hook_alter_form() to add this property to existing forms. Example:
'#checkall' => TRUE,  // <--- this is it ;-)
то есть пишешь модулек, там альтеришь вот этим.

Аватар пользователя Nikit Nikit 10 ноября 2015 в 11:46

ууух, ну давай один раз поальструистничаю
установи вышеуказанный модуль, и добавь следующий, вот главное тело:

<?php
// $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 основных строчек и двух файлов, проще не бывает.

Аватар пользователя Nikit Nikit 4 декабря 2009 в 5:04

Все эти хитрости потому что модуль checkall довольно универсальный, можете посмотреть в тестовом модуле (checkall_example).
я бы сам проще написал свой jquery, а так, хотя бы поймете как модули делать.