Я использую следующую функцию в XenForo, и флажки создаются для каждого узла, а выбранные параметры сохраняются в БД, но при перезагрузке параметра сохраненные значения не заполняются повторно в форме.
Опция:
<option option_id="hc_watched_forums_list" edit_format="callback" data_type="array" can_backup="1">
<default_value>a:6:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";i:3;s:1:"7";i:4;s:2:"36";i:5;s:2:"38";}</default_value>
<edit_format_params>HotCopper_Option_NodeChooser::renderCheckbox</edit_format_params>
<sub_options>*</sub_options>
<relation group_id="hc_misc_options" display_order="3306"/>
</option>
Функция: (упрощенно)
class HotCopper_Option_NodeChooser extends XenForo_Option_NodeChooser
{
public static function renderCheckBox(XenForo_View $view, $fieldPrefix, array $preparedOption, $canEdit)
{
return self::_render('option_list_option_checkbox', $view, $fieldPrefix, $preparedOption, $canEdit);
}
}
Можете ли вы предложить, почему это не заселение флажки и что я могу сделать, чтобы это исправить.
Спасибо
_render
метод в XenForo_Option_NodeChooser
класс ожидает, что будет только один выбранный узел, поэтому он ожидает, что значение будет одним целым числом без знака node_id
,
Когда вы передаете массив, он не работает.
Вам нужно будет создать свой собственный автономный метод, чтобы добавить в эту опцию.
Я перебил оригинальную модель и опцию узла xenforo.
Опцию просто нужно изменить, чтобы вызвать новую модель, и модели нужно было выбрать, чтобы проверить, был ли идентификатор узла в массиве значений.
public static function getNodeOptions($selectedForum, $includeRoot = false, $filter = false)
{
/* @var $nodeModel HotCopper_Model_Node */
$nodeModel = XenForo_Model::create('HotCopper_Model_Node');
$options = $nodeModel->getNodeOptionsArraySelectedArray(
$nodeModel->getAllNodes(),
$selectedForum,
"Choose Required Forums");
if ($filter)
{
foreach ($options AS &$option)
{
if (!empty($option['node_type_id']) && $option['node_type_id'] != $filter)
{
$option['disabled'] = 'disabled';
}
unset($option['node_type_id']);
}
}
return $options;
}
public function getNodeOptionsArraySelectedArray(array $nodes, array $selectedNodes, $includeRoot = false)
{
$options = array();
foreach ($nodes AS $nodeId => $node)
{
$node['depth'] += (($includeRoot && $nodeId) ? 1 : 0);
$options[$nodeId] = array(
'value' => $nodeId,
'label' => $node['title'],
'selected' => (in_array($nodeId,$selectedNodes)),
'depth' => $node['depth'],
'node_type_id' => $node['node_type_id']
);
}
return $options;
}