Перед созданием новой темы, пожалуйста, ознакомьтесь с FAQ по LinkorCMS

Новые поля [Добавление материала]

Пользователь
Сообщений: 8
Здравствуйте!
Вопрос, возможно, глупый.
Как сделать новые поля в формате Checkbox'а с зависимыми и независимыми переключателями?
Знаю, что делается в admin.php. Но как написать не знаю.
Разработчик
Сообщений: 287
Привет.
Вот пример:
System::admin()->FormRow('Чекбокс', '<label>Заголовок '.System::admin()->Check('check_name[]', 'val1', true, 'style="vertical-align: middle;"').'</label><br />'
.'<label>Заголовок '.System::admin()->Check('check_name[]', 'val2', true, 'style="vertical-align: middle;"').'</label>');
System::admin()->FormRow('Радио', '<label>Заголовок '.System::admin()->Radio('radio_name', 'val1', true, 'style="vertical-align: middle;"').'</label><br />'
.'<label>Заголовок '.System::admin()->Radio('radio_name', 'val2', false, 'style="vertical-align: middle;"').'</label>');

Для объединения элементов радио в группы используются одинаковые имена, в check можно также использовать имена вида name[], php превратит их в массив, но всё равно нужно проверять поля с check с помощью isset($_POST['name']), т.к. если элемент check не активен, то его значение не отправляется.
Для вывода формы нужен один AddCenterBox и AddForm. AddCenterBox в любом месте до AddForm, AddForm после добавления полей FormRow и FormTextRow.

-- Изменено "Агний": 27.07.2015 09:15 --
Пользователь
Сообщений: 8
Ангий,
Допустим я использую модуль Модуль Каталог - "рыба" для создания новых модулей.

В БД mytable_catalog создаю:
- поле radio int(1)
- поле check varchar(250)

В admin.php делаю изменения:
Ссылка на pastebin
Строки: 166-168;
Строки: 200-203;
Строки: 244-256; //Сами поля которые вы показали как пример
Строки: 304-310; //Проверка полей при изменении/сохранении статьи

Это так должно выглядеть?
Сам пробовал, пишет ошибку в 271 строке, не хватает или лишняя '}'
Разработчик
Сообщений: 287
Ошибка на 309 строчке:
if ($_POST['radio_name']==="val1") {$radio = EnToInt($_POST['val1'])} else {$radio = EnToInt($_POST['val2'])};
В конце не нужна точка с запятой и нужна перед каждой "}" (после оператора), фигурные скобки можно убрать, т.к. у вас по одному оператору на if и else.

Напутали с именами и значениями checkbox'ов, check_name - имя, cval1 - значение.
Так лучше:
$check = '';
if (isset($_POST['check_name'])) $check = implode(',', $_POST['check_name']);

Используется implode, чтобы объединить несколько значений(массив, т.к. в форме имена прописаны с []) в одну строку.

EnToInt нужно использовать, если у вас в форме не val1 и val2, а on и off например.
Поэтому можно просто:
if ($_POST['radio_name'] == 'val1') $radio = 1; else $radio = 2;

-- Изменено "Агний": 27.07.2015 12:21 --
Пользователь
Сообщений: 8
Агний,
Спасибо, но теперь при попытке добавить материал - ничего не происходит.
Обновляется страница, но не в списке материалов, не в БД ничего не добавляется.

P.S. Кэш чистил и сайта и браузера.

-- Изменено "Uchiha_Sasuke": 27.07.2015 12:55 --
Разработчик
Сообщений: 287
В БД точно есть поля radio и check?
У меня перенаправление не работает, но статья добавляется.
Пользователь
Сообщений: 8
Агний,
Разработчик
Сообщений: 287
check ключевое слово в SQL, просто переименуйте её.
Пользователь
Сообщений: 8
Агний,
Безрезультатно, так же обновляется страница и никаких новый статей.
Заменил check в БД на lorde.
admin.php на всякий
Разработчик
Сообщений: 287
Включите показ ошибок базы данных в файле config/db_config.php:
$config['db_errors'] = true;
И попробуйте снова.
Пользователь
Сообщений: 8
Разобрался. Благодарю, Агний.
Просто из-за того, что использовал "check" ДБ некорректно работать стала.
Переставил с резервов и вновь попробовал поставить, всё хорошо работает.
Еще вопрос по теме: Select'овое поле со множественным выбором как делается?

-- Изменено "Uchiha_Sasuke": 27.07.2015 18:37 --
Разработчик
Сообщений: 287
Устанавливаете третий параметр в true у метода Select и добавляете [] к имени:
System::admin()->Select('allow_votes[]', $enData, true);
Возможно, что не будет выбран ни один элемент, поэтому также как и с check нужно проверять на isset.

Заметил еще ошибку в модуле, статья не редактируется, нужно все имена колонок в set обернуть в обратные кавычки как это сделано в модуле "Статьи":
$set = "`cat_id`='$cat_id',`public`='$public'...

-- Изменено "Агний": 28.07.2015 09:39 --
Гости не могут отвечать на темы. Войдите или Зарегистрируйтесь.
Здесь присутствуют
(пользователей: 0, гостей: 1)
Быстрый переход: