Тип контента - кастомное поле - дополнительные значения 2.X

 
Посетитель
small user social cms
Сообщений: 95
Привет всем) разбираюсь с типом контента помогите пожалуйста, подскажите как правильно сделать и правильно ли я сделал то что уже сделал.
Сделал кастомное поле - "Имя сайта", грубо говоря это текстовое поле.
Сделал в админке новый тип контента "Каталог сайтов". В типе добавил мое кастомное поле - Имя сайта.

У кастомного поля кроме имени должны быть дополнительные параметры. К примеру это ТИЦ.
Для этого я сделал отдельную табличку site_params, в ней сделал столбцы
id - автоинкрементное
id_item_content - ИД записи контента что бы связать контент и дополнительные параметры
tic - собственно значение ТИЦ
так же я добавил контроллер site, там модель для работы с таблицей site_params ну и бекэенд будет.. в нем будут настройки компонента.

ТИЦ определяется автоматически при добавлении сайта и периодически будет обновляться.
Поиск в этом контенте буду делать с помощью стандартных средств и если будут задаваться параметры ТИЦ то будут использовать left join

ну собственно вопрос.. правильно ли я делаю..
вроде я где то натыкался на статью как делать для типа контента свою модель.. а не добавлять отдельный компонент и пользоваться его моделью.. но могу ошибаться)
ну и если есть где то инфа для разработчиков касаемая типов контента - киньте ссылкой пожалуйста..
наколхозить можно все что угодно... но вдруг тут есть уже то что мне нужно)) а я велосипед свой делаю))

Спасибо.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3540
У вас в типе контента "Каталог сайтов" в одной записи будет "стотыщьпитсот" сайтов или одна запись в типе контента об одном сайте?
Если одна запись об одном сайте, то достаточно вывести в одном стандартном поле "Имя сайта", в другом стандартном поле вывести "тИЦ", в третьем стандартном поле вывести ещё что-то и т.д. А для заполнения "тИЦ" написать хук в вашем контроллере (content_before_add, content_after_add).
kaktus:
не добавлять отдельный компонент и пользоваться его моделью
Модель привязана к контроллеру, вы можете связать один тип контента со своим компонентом, но модель без компонента не сработает.
Реклама
cms
Посетитель
small user social cms
Сообщений: 95
Loadырь:
У вас в типе контента "Каталог сайтов" в одной записи будет "стотыщьпитсот" сайтов или одна запись в типе контента об одном сайте?
Если одна запись об одном сайте, то достаточно вывести в одном стандартном поле "Имя сайта", в другом стандартном поле вывести "тИЦ", в третьем стандартном поле вывести ещё что-то и т.д.
в одной записи - один сайт..
я как то решил что отдельной табличкой в которой будут параметры будет проще.. а Ваш вариант действительно интересен.. только не очень понял как это работает..

А для заполнения "тИЦ" написать хук в вашем контроллере (content_before_add, content_after_add).
вот кстати насчет контроллера..
1. Я создал тип контента "Каталог сайтов"
2. Создал в нем два кастомных поля
2.1. Имя сайта текстовое поле
2.2. Тиц - числовое поле.. там есть такое, плюс там есть поиск по диапазону..
3. Сделал контролер, в манифесте повесил хук который при сохранении контента будет вычислять тиц исходя из параметров поля "Имя сайта", я так понял это общий хук content_before_add для любого контента, надо будет вычислять где там мой контент добавляется.. и когда вычислим то считать.

правильно?)
Спасибо)
Посетитель
small user social cms
Сообщений: 95
Loadырь:
Модель привязана к контроллеру, вы можете связать один тип контента со своим компонентом, но модель без компонента не сработает.
а как связываеться?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3540
kaktus:
я так понял это общий хук content_before_add для любого контента
Да, это общий хук, но есть и такие content_имятипаконтента_before_add.
kaktus:
только не очень понял как это работает..
Если поле ТИЦ не заполняется вручную, его можно сделать скрытым с доступом для определённой группы или заморочиться с виртуальным полем.
kaktus:
а как связываеться?
Имел в виду, что папку контроллера всё равно надо делать для своей модели.
Посетитель
small user social cms
Сообщений: 95
у меня еще вопрос, с помощью хука я навесил все что мне надо, вычисляется ТИЦ, количество в индексе страниц и т.п.
а вот если указали не правильный адрес сайта - то ничего не вычисляется естественно..
но не могу найти как в этом случае отказать в сохранении контента и вывести ошибку..
подскажите пожалуйста..
Спасибо.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3540
kaktus, валидацию поля лучше делать не в хуке, а в контроллере.

Вспомнил, есть и такой хук
Код PHP:
  1. list($item, $errors) = cmsEventsManager::hook('content_validate', array($item, $errors));
Редактировалось: 1 раз (Последний: 19 октября 2017 в 19:15)
Посетитель
small user social cms
Сообщений: 95
а как сделать валидацию в контроллере если он по сути то не связан с типом контента? мне надо перед сохранение перехватить приложение и сказать что валидация не пройдена потому что сайт не найден в инете..
не совсем понял как этим хуком воспользоваться что Вы подсказали..
спасибо..
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3540
kaktus:
не совсем понял как этим хуком воспользоваться что Вы подсказали
Принцип такой: создаёте хук в своём контроллере, по $item['ctype_name'] и $item['id'] получаете поля
Код PHP:
  1. $fields = cmsCore::getModel('content')->getContentFields($item['ctype_name'], $item['id']);
дальше проверяете в цикле наличие вашего поля - если нет возврщаете что пришло, если есть валидируете поле. Причём метод валидатора может быть во фронтенде вашего контроллера.
если проверка прошла возвращаете, что получили, если не прошла - в $errors добавляете
Код PHP:
  1. $errors['название_поля']='Не угадал';
Не точно, но как-то так.
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проектаПочетный донор проекта
Сообщений: 2298
Люди-человеки, добавьте чуточку кармы уважаемому Кактусу на бложик: есть подозрение, ему будет чего написать )
Недорогие Windows-сервера CRM для соцсетей
VPS с бесплатным администрированием!
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.