Как сделать скрытое поле в контенте?

#1 4 февраля 2015 в 14:43
Всю голову сломал, может кто подскажет?

Ножно скрыть поле в контенте и показать его пользователю, только если он введет пин-код (или кодовое слово).
Куда думать?
#2 4 февраля 2015 в 16:58
kreator, есть платный компонент "билинг". он может решить эту проблему.

Ну или разрешить просмотр только для зарегистрированных пользователей
#3 5 февраля 2015 в 00:06

есть платный компонент "Билинг". он может решить эту проблему

Александр
Он у меня уже есть, и я рассматриваю и другие варианты.
Из-за того что все системные файлы закрыты я пока не понимаю что с ним можно сделать, кроме как поменять шаблон.
Например главный вопрос: мне нужно перевести пользователя из группы "Зарегистрированные" в группу "Покупатели". Пока я там вижу что можно либо купить что-нибудь со страницы ли получить подписку для перехода в другую группу. Нужно чтоб купил "Поле" и в нагрузку получил "Подписку".
#4 5 февраля 2015 в 13:23
Порывшись покопавшись, нашел метод который перед публикацией позволяет менять код публикуемого контента и может управляться из любого компонента, именно этот метод и используется в компоненте билинг для замены поля на кнопку купить.

(столько всего интересного оказывается в Instantcms2!!!!!)

достаточно в компоненте создать hook для финишной обработки контента.

Создаем файл content_before_item.php в папке hooks со следующим содержанием:
  1. <?php
  2.  
  3. class onComponentContentBeforeItem extends cmsAction {
  4.  
  5. public function run($data){
  6. $fields = $data[2];
  7. $item = $data[1];
  8. $ctype = $data[0];
  9. }
  10.  
  11. }
  12.  
Входящие в него переменная $data имеет массив $fields — который содержит массив полей компонента, $item — Видимо массив который передает 'viewable', и $ctype — тип контента.

Так вот можно получив этот массив поменять в нем нужные данные. Может кто подскажет как перебрать этот массив и на выходе отправить свои данные.

Что тут не так:
  1. <?php
  2.  
  3. class onComponentContentBeforeItem extends cmsAction {
  4.  
  5. public function run($data){
  6. $fields = $data[2];
  7. $item = $data[1];
  8. $ctype = $data[0];
  9.  
  10. $fields['content'] = 'Свой контент';
  11.  
  12. return array($ctype,$item,$fields);
  13.  
  14. }
  15.  
  16. }
  17.  
Поле контент на выходе содержит "ничего". Пусто. Что неправильно я поменял в массиве?
#5 5 февраля 2015 в 13:37
Поле $fields = $data[2]; содержит только дополнительные поля. Править контент вам надо в переменной $item = $data[1]; тоесть
  1. $data[1]['content'] = 'Свой контент';
и возвращать надо
  1. return $data;
#6 5 февраля 2015 в 14:10
Loadырь, верно.
#7 5 февраля 2015 в 14:27

Что неправильно я поменял в массиве?

kreator
Массив $fields содержит не значения, а описания полей. Т.е. заголовки, пояснения, правила заполнения и т.п.
Значения в массиве $item, как уже Loadырь заметил.

Используйте функцию dump() чтобы посмотреть что внутри переменной, например
  1. dump($item);
#8 5 февраля 2015 в 14:37
Посмотрел действительно $data[1]['title'] — содержит заголовок, $data[1]['content'] — содержит контент
Но что-то водимо надо искать дальше, т.к. если написать $data[1]['title'] = 'Поменяли'; — заголовок меняется, а $data[1]['content'] = 'Поменяли'; — контент не меняется.

Но как мне помог ваш совет с функцией dump. Поменялось если так: $data[2]['content']['html'] = 'Поменяли!';
#9 6 февраля 2015 в 16:11
В продолжении этой темы, прошу раскрыть секретную информацию о системе. А именно:
Если в случае публикуемых данных мы использователи промежуточный хук content_before_item.php (о чем писали выше), то какой хук используется для фильтрации данных до внесения в БД (во время публикации)?

content_edit.php? — не угадал? scratch
#10 6 февраля 2015 в 19:02

content_edit.php? — не угадал?

kreator
Не угадал. item_add.php и item_edit.php в папке \system\controllers\content\actions\ там есть, что-то похожее на
  1. cmsEventsManager::hook("content_add", $ctype);
и
  1. $item = cmsEventsManager::hook("content_before_update", $item);
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.