Всю голову сломал, может кто подскажет?
Ножно скрыть поле в контенте и показать его пользователю, только если он введет пин-код (или кодовое слово).
Куда думать?
kreator, есть платный компонент "билинг". он может решить эту проблему.
Ну или разрешить просмотр только для зарегистрированных пользователей
Ну или разрешить просмотр только для зарегистрированных пользователей
#3
5 февраля 2015 в 00:06
Он у меня уже есть, и я рассматриваю и другие варианты.есть платный компонент "Билинг". он может решить эту проблему
Из-за того что все системные файлы закрыты я пока не понимаю что с ним можно сделать, кроме как поменять шаблон.
Например главный вопрос: мне нужно перевести пользователя из группы "Зарегистрированные" в группу "Покупатели". Пока я там вижу что можно либо купить что-нибудь со страницы ли получить подписку для перехода в другую группу. Нужно чтоб купил "Поле" и в нагрузку получил "Подписку".
Сегодня в 20:39
#4
5 февраля 2015 в 13:23
Порывшись покопавшись, нашел метод который перед публикацией позволяет менять код публикуемого контента и может управляться из любого компонента, именно этот метод и используется в компоненте билинг для замены поля на кнопку купить.
(столько всего интересного оказывается в Instantcms2!!!!!)
достаточно в компоненте создать hook для финишной обработки контента.
Создаем файл content_before_item.php в папке hooks со следующим содержанием:
Входящие в него переменная $data имеет массив $fields — который содержит массив полей компонента, $item — Видимо массив который передает 'viewable', и $ctype — тип контента.
Так вот можно получив этот массив поменять в нем нужные данные. Может кто подскажет как перебрать этот массив и на выходе отправить свои данные.
Что тут не так:
Поле контент на выходе содержит "ничего". Пусто. Что неправильно я поменял в массиве?
(столько всего интересного оказывается в Instantcms2!!!!!)
достаточно в компоненте создать hook для финишной обработки контента.
Создаем файл content_before_item.php в папке hooks со следующим содержанием:
<?php class onComponentContentBeforeItem extends cmsAction { public function run($data){ $fields = $data[2]; $item = $data[1]; $ctype = $data[0]; } }
Так вот можно получив этот массив поменять в нем нужные данные. Может кто подскажет как перебрать этот массив и на выходе отправить свои данные.
Что тут не так:
<?php class onComponentContentBeforeItem extends cmsAction { public function run($data){ $fields = $data[2]; $item = $data[1]; $ctype = $data[0]; $fields['content'] = 'Свой контент'; } }
#5
5 февраля 2015 в 13:37
Поле $fields = $data[2]; содержит только дополнительные поля. Править контент вам надо в переменной $item = $data[1]; тоесть
и возвращать надо
$data[1]['content'] = 'Свой контент';
return $data;
#6
5 февраля 2015 в 14:10
Loadырь, верно.
#7
5 февраля 2015 в 14:27
Массив $fields содержит не значения, а описания полей. Т.е. заголовки, пояснения, правила заполнения и т.п.Что неправильно я поменял в массиве?
Значения в массиве $item, как уже Loadырь заметил.
Используйте функцию dump() чтобы посмотреть что внутри переменной, например
dump($item);
#8
5 февраля 2015 в 14:37
Посмотрел действительно $data[1]['title'] — содержит заголовок, $data[1]['content'] — содержит контент
Но что-то водимо надо искать дальше, т.к. если написать $data[1]['title'] = 'Поменяли'; — заголовок меняется, а $data[1]['content'] = 'Поменяли'; — контент не меняется.
Но как мне помог ваш совет с функцией dump. Поменялось если так: $data[2]['content']['html'] = 'Поменяли!';
Но что-то водимо надо искать дальше, т.к. если написать $data[1]['title'] = 'Поменяли'; — заголовок меняется, а $data[1]['content'] = 'Поменяли'; — контент не меняется.
Но как мне помог ваш совет с функцией dump. Поменялось если так: $data[2]['content']['html'] = 'Поменяли!';
#9
6 февраля 2015 в 16:11
В продолжении этой темы, прошу раскрыть секретную информацию о системе. А именно:
Если в случае публикуемых данных мы использователи промежуточный хук content_before_item.php (о чем писали выше), то какой хук используется для фильтрации данных до внесения в БД (во время публикации)?
content_edit.php? — не угадал?
Если в случае публикуемых данных мы использователи промежуточный хук content_before_item.php (о чем писали выше), то какой хук используется для фильтрации данных до внесения в БД (во время публикации)?
content_edit.php? — не угадал?
#10
6 февраля 2015 в 19:02
Не угадал. item_add.php и item_edit.php в папке \system\controllers\content\actions\ там есть, что-то похожее наcontent_edit.php? — не угадал?
cmsEventsManager::hook("content_add", $ctype);
$item = cmsEventsManager::hook("content_before_update", $item);