НЕМОГУ ПЕРЕДАТЬ ЗНАЧЕНИЕ ИЗ ПРЕДСТАВЛЕНИЯ В КОНТРОЛЛЕР

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Влад Белов
Сообщения: 7
Зарегистрирован: 2014.05.29, 12:18

НЕМОГУ ПЕРЕДАТЬ ЗНАЧЕНИЕ ИЗ ПРЕДСТАВЛЕНИЯ В КОНТРОЛЛЕР

Сообщение Влад Белов »

Дорогие форумчане задача моя проста для Вас, но мне не хватает элементарного чего-то :(

Ситуация такая:
В представлении у меня 10 фотографий предметов и мне надо перейти в детальный вид каждого предмета где находится по 3 фотографии этого же предмета. Верстальщик использует ZURB Foundation 5 для адаптивной верстки.
Я пробовал использовать ImageButton(), однако такие изображения становятся не адаптивны т.к. не понимаются этим фреймворком как изображения.

Идея:
При нажатии на картинку передать её "name"=>"1", в контроллере взять эту переменную и передать её в вид, а в виде из папки под этим номером вытащить через цикл все фотографии этого предмета. В итоге получается один шаблон для всех предметов и другой для детального вида этих предметов, просто в каждый я передаю номер необходимой мне папки... там уже можно использовать для получения всех файлов scandir().

Вопрос следующий:
Мне надо по клику на изображении передать значение которое подвязываю к нему через HtmlOptions.
Подскажите есть ли какие-то методы или приемы для такой вот операции.
Просто я не хочу делать для каждого детального вида отдельные экшены (для чего их намножать-то :ugeek: )
Заранее благодарен.
badjo
Сообщения: 188
Зарегистрирован: 2013.10.10, 12:39

Re: НЕМОГУ ПЕРЕДАТЬ ЗНАЧЕНИЕ ИЗ ПРЕДСТАВЛЕНИЯ В КОНТРОЛЛЕР

Сообщение badjo »

Оберните главную фотографию в ссылку, через ссылку передавайте в контроллер параметр, методом GET.
Влад Белов
Сообщения: 7
Зарегистрирован: 2014.05.29, 12:18

Re: НЕМОГУ ПЕРЕДАТЬ ЗНАЧЕНИЕ ИЗ ПРЕДСТАВЛЕНИЯ В КОНТРОЛЛЕР

Сообщение Влад Белов »

Скажите я в представлении делаю так:

Код: Выделить всё

<li style="margin: 15px"><?php echo CHtml::link('Item', $this->createUrl('/default/ItemCollection/', array('id'=>1))) ?></li>
В контроллере:

Код: Выделить всё

//Пытаюсь словить мой переданный GET:
public function actionItemCollection($id)
    {
        if(isset($id)){
            var_dump($id); exit();
        }
    
        $this->render('views.itemCollection.index', ['id' => $id]);
    }
Кроме того дополнительный вопрос возникает: "Как мне в правилах валидации описать этот экшн"?

Код: Выделить всё

public function accessRules()
    {
        return array(

            array('allow', // allow all users to perform 'index' and 'view' actions
            'actions' => array('index', 'ItemCollection''), // "ItemCollection($id)" какой вариант правильный?
            'roles' => array(Roles::ROLE_GUEST),
            )
}
После всех попыток решение не найдено. :roll:
Влад Белов
Сообщения: 7
Зарегистрирован: 2014.05.29, 12:18

Re: НЕМОГУ ПЕРЕДАТЬ ЗНАЧЕНИЕ ИЗ ПРЕДСТАВЛЕНИЯ В КОНТРОЛЛЕР

Сообщение Влад Белов »

Благословен Господь! Благодарю пользователя badjo за то что толково подсказал где искать ответ. Решение такое:

Представление:

Код: Выделить всё

<?php ExtHtml::link('ItemCollection','/default/ItemCollection/1') ?>
Контроллер:

Код: Выделить всё

//Пытаюсь словить мой переданный GET:
public function actionItemCollection()
    {
        if(isset($_GET)){
            var_dump($_GET); exit();
        }
    
        $this->render('views.itemCollection.index', ['id' => $id]);
    }
 
На выходе... долгожданная:

Код: Выделить всё

array (size=1)
  1 => string '' (length=0) 
Конечно же main.php:

Код: Выделить всё

 // uncomment the following to enable URLs in path-format
        'urlManager' => array(
            'urlFormat' => 'path',
            'rules' => array(
                '<module:\w+>/<controller:\w+>' => '<module>/<controller>/',
                '<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module>/<controller>/<action>/<id>',
                '<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            ),
        'showScriptName' => false,
        ), 
Ответить