Категория по умолчанию.

InstantCMS 2.X

Как сделать необязательным выбор категории при добавлении контента?

#1 26 мая 2019 в 00:11
Имеется тип контента, где выбор категории требуется крайне редко. И весь контент этого типа, как правило в одной категории.
Но добавление контента без категории запрещено.
Иногда всё-таки требуется переключить категорию. Кому это надо — те знают, как переключить.
Просто хотелось бы облегчить жизнь остальным пользователям и не заставлять их каждый раз выбирать категорию.
Пробовал манипулировать хуком content_мойтипконтента_form.php — успеха не добился.
При невыбранной категории получаю ошибку "Найдены ошибки в форме".
Если перейти к добавлению контента из нужной категории — выбор не требуется, категория уже заполнена.
Может кто знает, как заполнить категорию значением по умолчанию?
#2 26 мая 2019 в 10:04
Ris, там вроде только один хук content_item_form, в нем и проверяете тип контента и в нем же заменяете поле с категорией на такую же с
  1. 'default' => 100500, // - тут id категории по умолчанию
Но надо правильно распаковать форму и потом обратно правильно запаковать в $form
#3 26 мая 2019 в 11:57

там вроде только один хук content_item_form, в нем и проверяете тип контента и в нем же заменяете поле с категорией на такую же с

Loadырь

Как это сделать?
и где править?
#4 26 мая 2019 в 12:36

там вроде только один хук content_item_form

Loadырь
Там есть еще в \system\controllers\content\actions\item_add.php хук
  1. list($form, $item) = cmsEventsManager::hook("content_{$ctype['name']}_form", array($form, $item));
И вроде и форма туда отправляется, но все манипуляции с этой формой приводят к ошибке. Даже просто разпаковка массива и отправка его обратно
  1. list($form, $item) = $data;
  2. return array($form, $item);
приводит к ошибке

Notice: Undefined offset: 0 in D:\OSPanel\domains\NO211.tes\system\controllers\content\frontend.php on line 786
Notice: Undefined offset: 1 in D:\OSPanel\domains\NO211.tes\system\controllers\content\frontend.php on line 786
Notice: Undefined offset: 2 in D:\OSPanel\domains\NO211.tes\system\controllers\content\frontend.php on line 786


А вот манипуляции с формой в content_item_form оказались возможны и успешны!
Сделал так:
  1. $form->structure['category']['childs']['category_id']->default = 3;
В результате, при добавлении новой единицы контента, в форме сразу выбрана нужная категория! dance

Loadырь, огромное спасибо!
#5 26 мая 2019 в 20:06

приводит к ошибке

Ris
На 2.12.2 ошибок не видел. Сделал в своем компоненте хук для новостей с таким содержимым
<?php

class onItoolsContentNewsForm extends cmsAction {

public function run($data){

list($form, $item) = $data;

$structure = $form->getStructure();

$structure['category']['childs']['category_id']->default = 3;

$form->setStructure($structure);

return array($form, $item);

}

}
все работает нормально.
#6 26 мая 2019 в 20:38
Loadырь,
Сделал, как Вы написали.
Все ошибки пропали.
Даже если отправлять обратно return $data; — всё равно работает после $form->setStructure($structure);
Видимо, что-то неявно сдвигается в мозгу php.
Видимо придётся углубиться в изучение объектов php…
#7 26 мая 2019 в 20:40
Ris, я же говорил

надо правильно распаковать форму и потом обратно правильно запаковать

Loadырь
#8 26 мая 2019 в 20:48

надо правильно распаковать форму и потом обратно правильно запаковать

Loadырь
Так я собственно и спрашивал, как это сделать. zst

Срабатывают уже две строчки.
  1. $structure = $form->getStructure();
  2. $structure['category']['childs']['category_id']->default = 3;
Всё остальное, как выяснилось, не обязательно...
-----------------------------------------------------------------------------
Также решил вопрос по отображению выбора группы для этого контента только для админов.
  1. $structure['group_wrap'] = $user->is_admin ? $structure['group_wrap'] : null;
#9 9 января 2020 в 23:24
Ну просто фантастика Господа Офицеры.

Верите-нет? Помогло! (сейчас дополню как)

Вот скажи мне американец, в чём сила?
А сила в коде. У кого знание кода, тот и сильней.

Спасибо! Ris!
#10 9 января 2020 в 23:35
Немного по-своему получилось.

Как-то субъективно, по дилетантски забредаю туда, куда сам Ris велел,

и, методом интуитивного тыка просто ставлю ВМЕСТО «0»,
номер той категории, которая нужна.

Выставил «1», и теперь по умолчанию стоит корневая категория.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.