Запрет добавления значения

 
Посетитель
small user social cms
Сообщений: 82
Здравствуйте.
Подскажите, как запретить добавлять определенные значения в поля. Есть встроенная в icms2 валидация но нужны свои условия. Как прописать правила для запрета на добавление значения при вводе недопустимого значения?
Спасибо.
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
Пока только перехватом событий и проверкой нужных полей там.
Реклама
cms
Посетитель
small user social cms
Сообщений: 82
значит бесполезно пытаться "соорудить" нечто вроде:
Код PHP:
  1.  
  2. public function getRules() {
  3. $this->rules[] = array('условия');
  4. if ($this->parse($value) == недопустимое значение) {
  5. return $this->rules;
  6. }else {
  7. return false;
  8. }
  9.  
Да и значение $this->parse($value) до сохранения не передаются в конструкцию...
печально.. по двум причинам - название поля в БД может быть произвольным и поле может использоваться несколько раз на странице (как отлавливать учитывая этот момент); не очень (даже очень не очень) разбираюсь в хуках...
Если возможно пару примеров перехвата с пояснениями (на нескольких примерах, думаю будет разобраться проще).
Спасибо.
Редактировалось: 1 раз (Последний: 15 мая 2016 в 09:27)
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
Вы, видимо, поленились прочитать документацию по перехвату событий по приведённой мной ссылке. Там всё прекрасно описано и есть пример.
Ответить что-то более точно по Вашему коду невозможно, так как неизвестно откуда этот код, как вызывается и т.п.
Посетитель
small user social cms
Сообщений: 82
Дело не в лени, а в отсутствии достаточных знаний, по этой причине и спрашиваю.
В типах контента в типе поля.. примеры по работе с контентом (а точнее примеры хуков для полей контена) к сожалению (доступно понятных) не нашел.
P.s. некоторые только учаться, а не уже знают...
Редактировалось: 1 раз (Последний: 15 мая 2016 в 10:14)
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
Fenix, Вы предоставляете слишком мало данных и слишком сумбурно, чтобы можно было Вам помочь конкретнее. Угадывать Ваши задачи никому не интересно. Хотите получить помощь - опишите какая задача, что пробовали, что именно не получается. Тогда шансы увеличатся.

Перехват событий для контента, если я правильно понял Вашу задачу, осуществляется так же, как написано в документации. Например, если нужно обработать полученные от пользователя данные перед добавлением контента, то можно перехватывать или событие "content_before_add" (для всех типов контента), или "content_ИмяНужногоТипаКонтента_before_add" (для контента только одного нужного типа, например, "content_articles_before_add" для статей в демо).
Для этого нужно сделать два действия, описанных в "Документация - Перехват событий": добавить запись о перехвате нужного события в манифест Вашего контроллера и добавить в этот контроллер обработчик события с проверкой введённых данных.
Редактировалось: 1 раз (Последний: 15 мая 2016 в 10:49)
Посетитель
small user social cms
Сообщений: 82
WebMan:
Fenix, Вы предоставляете слишком мало данных и слишком сумбурно
Да, согласен, извините.
Пробую разобраться на примерах...
Тип контента заранее не известен (поле может использоваться в любых компонентах, предусматривающих создание полей с помощью существующих типов полей) как и системное имя созданного поля.
допустим есть тип поля my_fields.php внутри функции parse($value) значение $value сравнивается со списком недопустимых значений $value.
В \system\controllers\content\manifest.php
добавляю 'value_delete',
В system\controllers\content\hooks\
создаю хук: называю его value_delete.php
Код PHP:
  1.  
  2. <?php
  3. class onContentValueDelete extends cmsAction {
  4. public function run($ctype){
  5. $value = unset ($value);
  6. return $value;
  7. }
  8. }
  9.  
И вызываю в my_fields.php
Код PHP:
  1.  
  2. if ($value = недопустимое значение) {$value= cmsEventsManager::hook('value_delete', $ctype);}
  3.  
Я правильно понял?
P.S. что-то окончательно запутался сам sad ...
Редактировалось: 1 раз (Последний: 15 мая 2016 в 11:44)
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
Fenix, я пока не понял Вашу задачу. Вы делаете своё поле и Вам нужно в нём сделать проверку? В какой момент (при создании поля в типах контента или при заполнении поля контента пользователем) и проверку чего? Или что-то другое?
Посетитель
small user social cms
Сообщений: 82
WebMan:
я пока не понял Вашу задачу
Да создается свое поле.
Нужно проверить введенные пользователем данные и при введении им недопустимого значения (определены в поле) - сбросить введенное пользователем значение (обнулить поле, тем самым не дав сохранить это значение, но оставить возможность ввести новое). (надеюсь понятно объяснил smile )
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
Теперь понятно. smile
Только сходу про создание полей я подсказать не смогу. Это точно без перехвата событий. Но как проще сделать - не знаю. Спросите у Loadыря, он спец по ним. И потом процитируйте его ответ тут в теме, это будет полезно другим людям.
Посетитель
small user social cms
Сообщений: 82
WebMan:
Только сходу про создание полей я подсказать не смогу
И на этом спасибо.
Посетитель
small user social cms
Сообщений: 82
Что-то вроде получается smile :
в system\controllers\content\manifest.php добавляем:
Код PHP:
  1. 'value_delete'
в \system\fields\my_fields.php
добавляю условие
Код PHP:
  1. if($value == недопустимое значение) { $value= cmsEventsManager::hook('value_delete', $value);}
в \system\controllers\content\hooks\ добавляю value_delete.php
Осталось решить вопрос что прописать для сброса значения в форме...
Если прописать
Код PHP:
  1.  
  2. class onContentValueDelete extends cmsAction {
  3.  
  4. public function run($value){
  5.  
  6. unset ($value);
  7.  
  8. return $value;
  9.  
  10. }
  11.  
  12. }
Форма сохранится, правда уничтожит $value при выводе сохраненной записи... этого результата можно добиться и просто прописав в my_fields.php

Код PHP:
  1. if ($value = недопустимое значение) {unset ($value);}
..... sad ....
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3591
Для поля хуки не нужны. У поля есть метод store(). В нём и делайте все проверки и выводите результат. Типа такого:
Код PHP:
  1.  
  2. public function store($value, $is_submitted, $old_value=null){
  3. if($value === недопустимое значение){
  4. return false;
  5. }
  6. return $value;
  7. }
  8.  
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
Fenix, Для Вашей цели не нужно использовать хуки вообще. Они тут не подходят, тем более в том виде, как Вы их применили. Манифест и \system\controllers\content\hooks\value_delete.php не нужны. Вы можете сделать проверку и сброс значения сразу в \system\fields\my_fields.php или используя встроенные механизмы Двойки.
А вот как именно это сделать "по феншую" посмотрите в стандартных полях или в бесплатных полях в "Дополнениях". Или подождите ответа на форуме.
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
А вот и Loadырь, уже ответил. Сразу видно - специалист. Кратко и эффективно. smile
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.