Текстовое представления для выпадающего списка

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Текстовое представления для выпадающего списка

Сообщение dony »

Добрый день. Есть 2 таблицы

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

CREATE TABLE `photo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(256) NOT NULL,
  `albums_id` int(11) NOT NULL, -- UPDATE Забыл написать внешний ключ
  `description` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `albums_id` (`albums_id`)
 ADD CONSTRAINT `photo_ibfk_1` FOREIGN KEY (`albums_id`) REFERENCES `albums` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE `albums` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(256) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 
Хочу сделать чтоб в выпадающем списке при создание photo вместо числовых значений были слова из albums.title. Пример, который есть в демо блоге для меня не совсем понятный, к тому же там в отдельной таблице хранятся данные. Как можно проще сделать чем здесь http://yiiframework.ru/doc/blog/ru/post.model ? Наведите на мысль
Последний раз редактировалось dony 2012.09.24, 11:31, всего редактировалось 3 раза.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Текстовое представления для выпадающего списка

Сообщение futbolim »

В модели Album создайте статический метод который возвращает названия и передавайте этот метод в dropDownBox

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

echo CHtml::dropDownBox($model, 'attribute', Album::getNames, array());
 
Я правильно Вас понял ?
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: Текстовое представления для выпадающего списка

Сообщение dony »

На всякий случай уточню: я хочу сделать такой же дробдаунлист как и в демо блоге http://www.yiiframework.com/demos/blog/ ... ost/create. В мануале http://yiiframework.ru/doc/blog/ru/post.model они используют общую таблицу для хранения данных и на входе принимают тип поля

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

public static function items($type)

но у меня не так и я не могу сообразить как сделать.
linkup писал(а):В модели Album создайте статический метод который возвращает названия
Можете подробнее? Это сделать выборку?

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

public static function getNames(){
return $items = Yii::app()->db->createCommand()->select('title')->from('albums')->queryAll();
}
 
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Текстовое представления для выпадающего списка

Сообщение futbolim »

ну да, а потом вернуть array_values
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: Текстовое представления для выпадающего списка

Сообщение dony »

linkup писал(а):ну да, а потом вернуть array_values
А что хранится в array_values?
Аватара пользователя
Ryadnov
Сообщения: 456
Зарегистрирован: 2010.06.20, 00:38
Откуда: Санкт-Петербург

Re: Текстовое представления для выпадающего списка

Сообщение Ryadnov »

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

    public static function getNames()
    {
        return CHtml::listData(self::model()->getDbConnection()->createCommand()->from(self::model()->tableName())->queryAll(), 'id', 'title');
    }
 
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: Текстовое представления для выпадающего списка

Сообщение dony »

По какой причине оно может не работать?
В модели Albums написал

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

public static function getNames()
    {
        return CHtml::listData(self::model()->getDbConnection()->createCommand()->from(self::model()->tableName())->queryAll(), 'id', 'title');
    } 
В файле представления

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

<div class="field">
    <?php echo $form->labelEx($model, 'albums_id'); ?>
    <?php echo $form->dropDownList($model, 'albums_id', Album::getNames, array()); ?>
    <?php echo $form->error($model, 'albums_id'); ?>
</div>
Аватара пользователя
aser
Сообщения: 167
Зарегистрирован: 2009.04.02, 14:25
Откуда: Киев

Re: Текстовое представления для выпадающего списка

Сообщение aser »

getNames - функция

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

<?php echo $form->dropDownList($model, 'albums_id', Album::getNames(), array()); ?>
И старайтесь публиковать текст ошибки.
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: Текстовое представления для выпадающего списка

Сообщение dony »

aser писал(а):И старайтесь публиковать текст ошибки.
Ошибки не было, просто парсер остановился на том месте и все...белая страница
А вот сейчас есть ошибка, то чего я боялся...связи

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

CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`photo`.`photo`, CONSTRAINT `photo_ibfk_1` FOREIGN KEY (`albums_id`) REFERENCES `albums` (`id`) ON DELETE CASCADE ON UPDATE CASCADE). The SQL statement executed was: INSERT INTO `photo` (`description`,  `name`) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5)
Модель Photo

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

return array(
            'albums' => array(self::BELONGS_TO, 'Albums', 'albums_id'),
        );
Модель Albums

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

return array(
            'photos' => array(self::HAS_MANY, 'Photo', 'albums_id'),
        );
Где может быть ошибка? В дропдаун листе, теперь текстовое представление, оно наверное и записывается в БД, в поле, которое должно быть int, я так думаю.
Аватара пользователя
aser
Сообщения: 167
Зарегистрирован: 2009.04.02, 14:25
Откуда: Киев

Re: Текстовое представления для выпадающего списка

Сообщение aser »

Так сложно что то сказать
Покажите само действие и весь файл модели фотографии
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: Текстовое представления для выпадающего списка

Сообщение dony »

aser писал(а):Покажите само действие и весь файл модели фотографии
Модели стандартные с генерированные Gii, я там только добавил, то что тут написали, ну и связи. их я написал, остальное стандартное
Аватара пользователя
aser
Сообщения: 167
Зарегистрирован: 2009.04.02, 14:25
Откуда: Киев

Re: Текстовое представления для выпадающего списка

Сообщение aser »

Ну сложно догадаться что сформировал вам gii. Хотя бы правила валидации.
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: Текстовое представления для выпадающего списка

Сообщение dony »

Я понял в чем была ошибка. Почему пока я явно не указал какие данные должны сохраняться в каком поле, они в бд не доходили?

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

$model->albums_id = $_POST['Photo']['albums_id']; 
Хотя это написано тоже, но без верхней строчки не работает

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

$model->attributes = $_POST['Photo']; 
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Текстовое представления для выпадающего списка

Сообщение anton44eg »

у вас не были правильно прописаны правила валидации, вот и все. вас же просили показать код модели
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: Текстовое представления для выпадающего списка

Сообщение dony »

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

    public function rules() {
        return array(
            array('description, albums_id', 'required'),
    } 
Правила валидации это оно?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Текстовое представления для выпадающего списка

Сообщение anton44eg »

да, если не прописано правило валидации для аттрибута он не буде присваиваться при массовом присвоении
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: Текстовое представления для выпадающего списка

Сообщение dony »

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

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

    public static function getNames()
    {
        return CHtml::listData(self::model()->getDbConnection()->createCommand()->from(self::model()->tableName())->queryAll(), 'id', 'title');
    } 
в таблице делаю так:

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

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'photo-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        array(
            'name' => 'albums_id',
            'value'=>'Albums::getNames()',
            'filter'=>true,
        ),
        array(
            'class' => 'CButtonColumn',
        ),
    ),
)); 
в демо блоге эта часть реализована, но там структура таблиц другая чем у меня.
Фильтрация по полю статус http://www.yiiframework.com/demos/blog/ ... post/admin
foros90
Сообщения: 21
Зарегистрирован: 2012.09.26, 12:43

Re: Текстовое представления для выпадающего списка

Сообщение foros90 »

Всем добрый день! Ребят, я здесь ещё новичок, поэтому могу запутаться - что и кому писать. Я изучаю php уже год. За это время написал несколько своих cms, затем решил перейти на framework-ки типа codeigniter и yii. Первым выбрал codeigniter, немножко разобрался, yii вызвал больший интерес. Решил копать его. Установил его, распаковал, поменял дизайн не много и т.д. Создал crud модельки категорий, статей, визуальный редактор подключил, и всё потеряло смысл когда решил сделать личный кабинет для пользователей, а так же форму авторизации перенести в отдельный файл. Не так как на стандартном шаблоне она висит. Кто нибудь сможет помочь с данным вопросом? По началу лучше разобраться с формой авторизации, мне кажется кабинет делать дольше и сложнее. Спасибо за внимание. Жду ответа...
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Текстовое представления для выпадающего списка

Сообщение anton44eg »

а причем тут эта тема?
создавайте тему вопроса по формам, описывайте в чем именно проблема
Ответить