Как устроен компонент places

#1 22 марта 2015 в 17:01
Вопрос больше всего к администрации или к разработчикам которые сталкивались с такой проблемой.
Есть тип контента places и есть компонент places, со своим frontend.php model.php и т.д. и вот возникает вопрос, почему нет конфликта?
Пытаюсь доработать тип контента, создаю папку в controllers, создаю frontend.php и model.php но на сайте получаю индексную страницу из frontend.php, если убрать actionIndex() то получаю ошибку 404
Как в InstantMaps это устроено?
#2 22 марта 2015 в 19:44
Тоже интересен такой вопрос: Как увязать тип контента и компонент с таким же системным именем? Есть лишь предположение, что они связанны роутерами и хуками. Но пока у меня маловато знаний движка и времени на поиски решения в этом вопросе.
#3 22 марта 2015 в 19:50

Как увязать тип контента и компонент с таким же системным именем

Loadырь
Я так форум начал делать.
Как только есть тип контента и такая же папка, между ними появляется связь.
Создается компонент и играет по правилам и настройкам созданного контента.
Т.е. все что в админке в типе контента настраивается, можно использовать в компоненте.
Теперь нужно создавать свои файлы обработки и функции.
Большинство наследуется из стандартных системных.
Может не правильно как то выражаюсь конечно, но я два дня убил чтоб немного понять что-куда.
И получилось такое начало компонента форум: instantcms.2bl.ru/topic
Соответственно все разделы управляются штатно, и записи тоже из админки.
#4 22 марта 2015 в 19:59


Как увязать тип контента и компонент с таким же системным именем

Loadырь
Я так форум начал делать.
Как только есть тип контента и такая же папка, между ними появляется связь.
Создается компонент и играет по правилам и настройкам созданного контента.
Т.е. все что в админке в типе контента настраивается, можно использовать в компоненте.
Теперь нужно создавать свои файлы обработки и функции.
Большинство наследуется из стандартных системных.
Может не правильно как то выражаюсь конечно, но я два дня убил чтоб немного понять что-куда.
И получилось такое начало компонента форум: instantcms.2bl.ru/topic
Соответственно все разделы управляются штатно, и записи тоже из админки.

kreator

Здорово… Если бы поля и свойства типов контента были функциональней и более расширенными..
То наверное и форум можно было сваять с помощью УК.)) Теоретически...)))
#5 6 апреля 2015 в 23:59

Пытаюсь доработать тип контента, создаю папку в controllers, создаю frontend.php и model.php но на сайте получаю индексную страницу из frontend.php, если убрать actionIndex() то получаю ошибку 404
Как в InstantMaps это устроено?

Evanescence
присоединяюсь к вопросу. Тоже самое происходит
#6 8 апреля 2015 в 00:53
Вообщем получилось разобраться. Огромное спасибо Val за огромную помощь!!!
Чтобы соединить компонент и тип контента, нужно в файле фронтенд добавить две функции:
  1.  
  2. public function routeAction($action_name) {
  3. $core = cmsCore::getInstance(); // подключаем ядро
  4.  
  5. if (!$core->uri_params) { // если параметров в ссылке нет, то
  6. $core->uri_controller = 'content'; // указываем имя нужного контроллера
  7. $core->runController(); // и запускаем его
  8.  
  9. $this->current_params = array();
  10. return 'close'; // после вывода шаблона, показываем пустой экшен первого контроллера
  11. }
  12. return $action_name; // возвращаем имя экшена, если есть параметры в ссылке
  13.  
  14. }
  15.  
  16. public function actionClose(){
  17. return false;
  18. }
  19.  
#7 8 апреля 2015 в 06:31
Rossoman, зачем вызывать пустой экшн
  1. return 'close'; // после вывода шаблона, показываем пустой экшен первого контроллера
если можно сразу вернуть пустоту?
  1. return false; // после вывода шаблона, выводим ничего
#8 8 апреля 2015 в 08:35
Loadырь, если вернуть return false внутри условия, то результат работы функции routeAction() будет false ))) и, следовательно, система решит что запрашиваемой страницы/контроллера нет и покажет 404. В приведенном примере, результат работы функции будет вызов экшена Close() (а уж что там close возвращает нам не интересно)), т.к. заранее мы передали управление контроллеру content).
Как то так smile
#9 8 апреля 2015 в 09:11
Val, спасибо, ещё пару-тройку недель и я доберусь до своего компонента. Какие ещё есть нюансы?
#10 8 апреля 2015 в 09:55
В InstantMaps сделано так:

  1.  
  2. public function routeAction($action_name) {
  3.  
  4. $core = cmsCore::getInstance();
  5.  
  6. if (!$this->isActionExists($action_name)){
  7. $core->uri_controller = 'content';
  8. $core->runController();
  9. $this->current_params = array();
  10. return 'exit';
  11. }
  12.  
  13. return $action_name;
  14.  
  15. }
  16.  
  17. public function actionExit(){ return; }
  18.  
#11 8 апреля 2015 в 10:30

В InstantMaps сделано так:

r2
Вот спасибо. А то покоя не давало что в условии приходиться помимо проверки на параметры напрямую указывать нужные экшены, иначе не работало редактирование/удаление
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.