Как определить действие?

 
Посетитель
small user social cms
Медаль
Сообщений: 624
Друзья всех с новым годом!

Друзья создаю компонент, есть категория sport/basketball/1 все работает правильно, но теперь хочу продлить цепочку но уже не знаю как сделать помогите.
Хочу сделать так, sport/basketball/1/1, то есть, например нажимаем на баскетбол там список турниров, далее нажимаем на турнир он перекидывает "id", $id sport/basketball/1 по фильтру. там список, например команд, и теперь хочу при нажатие на команду выводилась страница sport/basketball/1/1 вот это уже не могу сделать страница выводится но без данных, если знаете помогите пожалуйста.

Вот model.php

Спойлер

index.php (sport)

Спойлер
Вот sport/basketball.php
Спойлер
Вот basketball.tpl


Спойлер
Редактировалось: 7 раз (Последний: 1 января 2017 в 13:44)
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Вам следует почитать документацию http://docs.instantcms.ru/dev/controllers тогда сразу все понятно станет.
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 624
kirkr:

Вам следует почитать документацию http://docs.instantcms.ru/dev/controllers тогда сразу все понятно станет.

Я читал и почти делал как там но дальше не понимаю как это сделать =(
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Нико,
public function actionCatalog($do, $id){

в функцию передается два параметра, вы можете передать хоть 50, но они по очереди берутся из адреса

Скопирую вставлю:

Определение действий

Действие контроллера (экшен) - это дочерний метод класса контроллера, обрабатывающий запросы пользователя через URL.

Например, пользователь открывает страницу site.ru/shop/catalog/view/123. Роутер InstantCMS произведет разбор данного адреса на составные части:

shop - компонент, frontend-контроллер которого нужно запустить
catalog - экшен контроллера, который нужно вызвать
все что далее, в нашем случае view и 123 - параметры, которые нужно передать экшену

Таким образом, чтобы обработать подобный URL мы должны создать файл /system/controllers/shop/frontend.php со следующим содержимым:

class shop extends cmsFrontend {

public function actionCatalog($do, $id){
dump("Hello, do = {$do}, id = {$id}");
}

}

В результате, после открытия URL site.ru/shop/catalog/view/123 пользователь увидит в браузере текст:

Hello, do = view, id = 123

Разумеется, в реальности экшен не должен совершать вывод на экран с помощью dump() или echo. Вместо этого используются шаблоны, работа с которыми будет рассмотрена в следующих разделах.

В вашем примере

sport/basketball/1/1

будет
sport - компонент, frontend-контроллер которого нужно запустить
basketball - экшен контроллера, который нужно вызвать
1(первая единица)- параметры, которые нужно передать экшену первым
1(вторая единица)- параметры, которые нужно передать экшену вторым

Так понятнее??? просто вы в функции только один параметр принимаете, сделайте dump как в примере
actionBasketball($do, $id1,$id2)
Редактировалось: 2 раз (Последний: 1 января 2017 в 13:35)
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
Медаль
Сообщений: 624
kirkr:

Нико,
public function actionCatalog($do, $id){

в функцию передается два параметра, вы можете передать хоть 50, но они по очереди берутся из адреса

Скопирую вставлю:

Определение действий

Действие контроллера (экшен) - это дочерний метод класса контроллера, обрабатывающий запросы пользователя через URL.

Например, пользователь открывает страницу site.ru/shop/catalog/view/123. Роутер InstantCMS произведет разбор данного адреса на составные части:

shop - компонент, frontend-контроллер которого нужно запустить
catalog - экшен контроллера, который нужно вызвать
все что далее, в нашем случае view и 123 - параметры, которые нужно передать экшену

Таким образом, чтобы обработать подобный URL мы должны создать файл /system/controllers/shop/frontend.php со следующим содержимым:

class shop extends cmsFrontend {

public function actionCatalog($do, $id){
dump("Hello, do = {$do}, id = {$id}");
}

}

В результате, после открытия URL site.ru/shop/catalog/view/123 пользователь увидит в браузере текст:

Hello, do = view, id = 123

Разумеется, в реальности экшен не должен совершать вывод на экран с помощью dump() или echo. Вместо этого используются шаблоны, работа с которыми будет рассмотрена в следующих разделах.

Я это понял но как его вывести в шаблон во это не могу =(
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
В вашем примере

sport/basketball/1/1

будет
sport - компонент, frontend-контроллер которого нужно запустить
basketball - экшен контроллера, который нужно вызвать
1(первая единица)- параметры, которые нужно передать экшену первым
1(вторая единица)- параметры, которые нужно передать экшену вторым

Так понятнее??? просто вы в функции только один параметр принимаете, сделайте dump как в примере
actionBasketball($do, $id1,$id2)
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
Медаль
Сообщений: 624
kirkr:

В вашем примере

sport/basketball/1/1

будет
sport - компонент, frontend-контроллер которого нужно запустить
basketball - экшен контроллера, который нужно вызвать
1(первая единица)- параметры, которые нужно передать экшену первым
1(вторая единица)- параметры, которые нужно передать экшену вторым

Так понятнее??? просто вы в функции только один параметр принимаете, сделайте dump как в примере
actionBasketball($do, $id1,$id2)

Я извиняюсь, можете на моем примере кода показать, ни как не могу понять =(
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Нико,
class actionSportBasketball extends cmsAction {

public function run($id = false) {

Вы ждете только один ID, что тут еще ждать то ?=))

т.е. в вашей функции только ожидается одна переменная остальные отрезаются, поэтому и говорю выводите дамп, сразу поймете что увас передается в функцию.
Редактировалось: 1 раз (Последний: 1 января 2017 в 13:47)
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
Медаль
Сообщений: 624
kirkr:

Нико,
class actionSportBasketball extends cmsAction {

public function run($id = false) {

Вы ждете только один ID, что тут еще ждать то ?=))

т.е. в вашей функции только ожидается одна переменная остальные отрезаются, поэтому и говорю выводите дамп, сразу поймете что увас передается в функцию.

Спойлер
Я только что не делала, и так передавала, но не получается, ссылка появляется, все окей, но мне нужно что было так

sport/baksektball ->/ 1(оne) ->/ 2 (two)

То есть где 2 (two) там были отдельные данные из базы, которые будут относится к 1 (one)

sport/basketball ->/ 2(two) ->/(3) (three) там уже относятся к (two) id == do }
Редактировалось: 3 раз (Последний: 1 января 2017 в 13:58)
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Нико,
dump переменных $total, $tournaments, $sport_tournament
сделайте, все ли есть.

Если не можете, то в личку скайп скиньте и доступ к ftp покажу что не так.
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
в догонку, проблема оказалась в отсутствии файла routes.php с описанием:

Код PHP:
  1.  
  2. <?php
  3. function routes_content(){
  4. return array(
  5. 'pattern' => '/^([a-z0-9\-_]+)\/([a-zA-Z0-9\-\/]+)$/i',
  6. 'action' => 'baksektball ',
  7. 1 => 'id1',
  8. 2 => 'id2'
  9. ),
  10. );
  11.  
  12. }
  13.  
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.