Так что я уже давно это делаю. Я пытаюсь создать таблицу перетаскивания, которая имеет отношения родитель-потомок, но где дети не могут быть перемещены из родительской группы, и все родители сортируются между собой. Я смоделировал свою форму и тему вне кода меню администратора, и у меня есть это дублирование этой функциональности. Проблема в том, что я могу переместить детей другому родителю или позволить ему стать родителем. В качестве иллюстрации:Drupal: Перетаскиваемый стол родительского ребенка
Category 1
|
|--Item 1
|--Item 2
Category 2
|
|--Item 3
|--Item 4
|--Item 5
Я хотел бы иметь возможность сортировать пункт 1 и пункт 2 друг с другом, а также пункт 3, пункт 4, и пункт 5 друг с другом, но не перемещать их между категории 1 и Категория 2. Мне также нужно иметь возможность сортировать категории 1 и категорию 2 друг с другом, беря с собой детей. Я прошел через множество комбинаций $action
, $group
, $subgroup
настроек, смешанных с $class
настройками для категорий и элементов, которые я потерял. Ничто из того, что я пробовал до сих пор, не вызвало желаемого результата. Вот соответствующие биты моего кода, как это в настоящее время:
В моей форме:
$form['#tree'] = true;
foreach($categories as $cat) {
if(!isset($form['categories'][$cat->cid])){
$form['categories'][$cat->cid] = array(
'weight' => array(
'#type' => 'weight',
'#delta' => 25,
'#attributes' => array('class' => array('item-weight', 'item-weight-' . $cat->cid)),
),
'cid' => array(
'#type' => 'hidden',
'#value' => $cat->cid,
'#attributes' => array('class' => array('cid')),
),
);
foreach($cats[$cat->cid] as $item) {
$form['categories'][$cat->cid]['items'][$item->id] = array(
'weight' => array(
'#type' => 'weight',
'#delta' => 25,
'#default_value'=> $item->weight,
'#attributes' => array('class' => array('item-weight', 'item-weight-' . $cat->cid)),
),
'cid' => array(
'#type' => 'hidden',
'#value' => $cat->cid,
'#attributes' => array('class' => array('cid')),
),
);
}
}
}
В моей теме:
$children = element_children($form['categories']);
$rows = array();
if(count($children) > 0) {
foreach($children as $cid) {
$row = array(
drupal_render($form['categories'][$cid]['weight']) .
drupal_render($form['categories'][$cid]['cid']),
);
$rows[] = array(
'data' => $row,
'class' => array('draggable', 'tabledrag-root'),
);
foreach(element_children($form['categories'][$cid]['items']) as $id) {
$row = array(
theme('indentation', array('size' => 1)) . drupal_render($form['categories'][$cid]['items'][$id]['name']),
drupal_render($form['categories'][$cid]['items'][$id]['weight']) .
drupal_render($form['categories'][$cid]['items'][$id]['cid']),
);
$rows[] = array(
'data' => $row,
'class' => array('draggable', 'tabledrag-leaf'),
);
}
drupal_add_tabledrag('cat-table', 'order', 'sibling', 'item-weight', 'item-weight-' . $cid);
}
}
drupal_add_tabledrag('cat-table', 'match', 'parent', 'cid', 'cid', 'cid', true, 1);
$output = theme('table', array('header' => $headers, 'rows' => $rows, 'attributes' => array('id' => 'cat-table')));
$output .= drupal_render_children($form);
return $output;
Я перечитал документацию для drupal_add_tabledrag()
, смотрели на код, посмотрел пример кода и обыскал вокруг drupal.org и Google, но ничего не придумал.
Мое единственное решение до сих пор заключается в том, чтобы скопировать и изменить файл tabledrag.js, чтобы просто устранить эти возможности, но при остановке проблемы с отступом с элементами (что означает, не позволяя им быть одинаковыми с категориями), сохраняя их в той же категории было не забава.
Я полагаю, что самый важный вопрос: использование стандартного Drupal - это возможно?
как abt использовать fieldset для его форматирования? http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#fieldset –