Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Создание и сохранение новых тэгов в блоге (Yii2)
Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
Пробую использовать метод с тэгами, используя модели и события. Что нужно изменить здесь, чтобы можно было добавлять произвольные тэги и как решить ошибку: 'Getting unknown property medeyacom\blog\models\Tag::tag'?
В function afterSave также используется новая переменная $old_tags, но нужно ли её как-то объявлять где-нибудь?
Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
. Прикреплено изображение (Нажмите для увеличения)
andrewkard
Отправлено: 26 Августа, 2017 - 12:01:33
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
Вы используете ActiveRecord, соотв. нужно иметь такую колонку в БД
Sandro_s
Отправлено: 26 Августа, 2017 - 18:17:02
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
andrewkard пишет:
Вы используете ActiveRecord, соотв. нужно иметь такую колонку в БД
Какую колонку именно? В БД есть таблица Тag. Ошибка указывает на то, что в модели Tag нет атрибута tag. В ней есть id есть name, а tag нету. Но вот тут (в тексте ошибки есть четко файл и номер строки, которая вызвала ошибку):
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
Sandro_s пишет:
Но вот тут (в тексте ошибки есть четко файл и номер строки, которая вызвала ошибку):
нужно смотреть на свойство $this->tags, и судя по методу getTags() в этом свойстве будут строки AR, модели Tag, далее смотрим что делает ArrayHelper::map, она пытается создать карту из массива $this->tags с ключами (в данном случае атрибутами) tag tag, которого в модели Tag нет, об этом и ошибка. (Добавление)
Sandro_s пишет:
Но как это исправить?
Нужно понять что Вы хотите видеть в $this->newtags
Sandro_s
Отправлено: 28 Августа, 2017 - 19:39:43
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
andrewkard пишет:
Sandro_s пишет:
Но вот тут (в тексте ошибки есть четко файл и номер строки, которая вызвала ошибку):
нужно смотреть на свойство $this->tags, и судя по методу getTags() в этом свойстве будут строки AR, модели Tag, далее смотрим что делает ArrayHelper::map, она пытается создать карту из массива $this->tags с ключами (в данном случае атрибутами) tag tag, которого в модели Tag нет, об этом и ошибка. (Добавление)
Sandro_s пишет:
Но как это исправить?
Нужно понять что Вы хотите видеть в $this->newtags
Основная задача- чтобы можно было создавать новые теги в постах блога.
Как я понимаю..если смотреть на связь 'function afterFind' в Blog.php, то чтобы передать данные, нужен атрибут tag в модели Tag.php" Но в таблице tag у меня только 'id' и 'name', как и в Tag.php - я добавил поле 'tag' в таблицу, в @property integer, в 'rules' и 'attributeLabels'. Ошибка исчезла, только теги не сохраняются и не создаются новые.
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
Метод public function afterFind() Вам не нужен, это делает метод public function getTags(), т.е. в свойстве blog->tags будут тэги этого блога. Только вот связи не вижу. Судя по всему вам нужна колонка blog_id в модели Таг. А добавлять как обычно. model->save()
$model = new Tag();
$model->blog_id = 123;
....
$model->save();
как то так (Добавление)
andrewkard пишет:
я добавил поле 'tag' в таблицу
это не нужно
Sandro_s
Отправлено: 28 Августа, 2017 - 21:31:07
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
andrewkard пишет:
Метод public function afterFind() Вам не нужен, это делает метод public function getTags(), т.е. в свойстве blog->tags будут тэги этого блога. Только вот связи не вижу. Судя по всему вам нужна колонка blog_id в модели Таг. А добавлять как обычно. model->save()
$model = new Tag();
$model->blog_id = 123;
....
$model->save();
как то так (Добавление)
andrewkard пишет:
я добавил поле 'tag' в таблицу
это не нужно
А ошибка 'Getting Unknown Property ' c атрибутом 'tag' исчезла только когда добавил в таблицу -либо полностью закомм. 'afterFind'
Попробую объяснить как бы хотелось реализовать этот метод, хотя сам не оч.понимаю логику))
afterFind происходит когда загрузились данные из базы в модель, заполнили данные модели т.е. когда в посте редактирования нажали 'update', то туда должны подтягиваться теги, которые связаны (а они, по идее, хранятся в 'newtags' , а изначально он = 'null' и соответственно, в afterFind мы их наполняем. При этом дёргая связь "Get tags ' После этого, должны получить из неё массив $this ->tags (т.к. это 'HasMany' и дальше надо сделать из этого массив, чтобы скормить его vidget Select 2
Для этого берем данные $this ->tags с помощью ArrayHelper:: map- передаем данные и говорим, что нужно, чтобы был атрибут 'tag' из модели Таг.php ($property tag ) - он же был и ключем и значением.- это так надо для Select 2 т.е. он заполняется и во views нужно передать.
У меня есть таблица "blog_tag' и связь 'getBlogTag"- она как-бы промежуточная между 'blog' и 'tag' и в ней есть 'blog_id' и 'tag_id".
andrewkard
Отправлено: 28 Августа, 2017 - 22:02:48
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
Sandro_s пишет:
это так надо для Select 2
а не name name ? (Добавление)
а, я понял, afterFind нужен, в нем Вы хотите наполнить свойство $this->newtags, но тогда таг Вам не нужен, а name (Добавление)
Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
andrewkard пишет:
Sandro_s пишет:
это так надо для Select 2
а не name name ? (Добавление)
а, я понял, afterFind нужен, в нем Вы хотите наполнить свойство $this->newtags, но тогда таг Вам не нужен, а name (Добавление)
или что в нем, в этом name ? название его какое то или все же значение
Да, верно, по идее свойство $this->newtags нужно наполнить, но
так я уже пробовал с "name' - теги не сохраняются.
Если смотрепть в логах 2 metod POST admin.site.com/blog/blog/update?id=5 то там явно ошибка проблема со связью последняя строчка логов "0=1" - это явно ошибка.(скрин внизу) на строке 230 там:
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
Sandro_s пишет:
как подключать, вроде бы здесь или нет?
Цитата:
Usage
coming soon
А вообще то подключать ничего не нужно, просто используйте (хотя на первый взгляд он сыроват),
Зачем он Вам только.
Всего то что нужно 3 модели, Блог, Таг, ТагФорм, в Блоге делаете связь гетТагс, блог->тагс будут тэги блога. Форма на создание и редактирования тага, Таг, это модель АР, три поля, id,tag,blog_id
Все это делается за 5 мин с помощью Гии
Sandro_s
Отправлено: 01 Сентября, 2017 - 22:45:25
Новичок
Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017
Помог: 0 раз(а)
andrewkard пишет:
Sandro_s пишет:
как подключать, вроде бы здесь или нет?
Цитата:
Usage
coming soon
А вообще то подключать ничего не нужно, просто используйте (хотя на первый взгляд он сыроват),
Зачем он Вам только.
Всего то что нужно 3 модели, Блог, Таг, ТагФорм, в Блоге делаете связь гетТагс, блог->тагс будут тэги блога. Форма на создание и редактирования тага, Таг, это модель АР, три поля, id,tag,blog_id
Все это делается за 5 мин с помощью Гии
Да, он сырой..но лучше, чем ничего) Структуру проекта, однозначно, придётся переделывать, только у меня ведь есть такая связь уже и поля в таблице. Или нужно заново именно под этот модуль генерировать в Gii?
Сейчас пробую параллельно установить заново advanced с миграциями и модулями тегов, так вот php-init запустился, миграции тоже, в базе они есть. В настройках Open Server домены прописаны. только вот fronted\web запускается нормально, а backend\web c ошибкой:
в процессе php-init
Цитата:
generate cookie validation key in backend/config/main-local.php
PHP Warning: file_get_contents(D:/sites/interjobs/backend/config/main-local.php): failed to open stream: No such file or directory in D:\sites\interjobs\init on line 211
Warning: file_get_contents(D:/sites/interjobs/backend/config/main-local.php): failed to open stream: No such file or directory in D:\sites\interjobs\init on line 211
У меня пока недостаточно сообщений, чтобы Вам '+" поставить) но вопросы есть ещё))
Этот файл при установке в игнор попал- и я вставил его из другого проекта- Admin LTE появилась..но зарегистрироваться нельзя и я, чтобы зайти- скопировал данные админа из другой базы, но это, наверное, не правильно..Cейчас, получается, любой пользователь зарег. во fronted может зайти и в backend.
И вот теперь, чтобы cлева link 'Tеги' появился, как я понимаю -надо в backand/veiws/layouts/left.php вписать <code lang="php">
['label' => 'Теги', 'icon' => 'tags', 'url' => ['/tag']],
</code> а что ещё нужно подключить?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.