Как получить флажки для повторного заполнения, используя параметры xenforo

Я использую следующую функцию в 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);
    }
}

Можете ли вы предложить, почему это не заселение флажки и что я могу сделать, чтобы это исправить. Спасибо

2 ответа

Решение

Я перебил оригинальную модель и опцию узла 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;
    }

_render метод в XenForo_Option_NodeChooser класс ожидает, что будет только один выбранный узел, поэтому он ожидает, что значение будет одним целым числом без знака node_id,

Когда вы передаете массив, он не работает.

Вам нужно будет создать свой собственный автономный метод, чтобы добавить в эту опцию.

Другие вопросы по тегам