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)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: yii2
Sandro_s
Отправлено: 25 Августа, 2017 - 22:45:49
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




Пробую использовать метод с тэгами, используя модели и события. Что нужно изменить здесь, чтобы можно было добавлять произвольные тэги и как решить ошибку: 'Getting unknown property medeyacom\blog\models\Tag::tag'?

В function afterSave также используется новая переменная $old_tags, но нужно ли её как-то объявлять где-нибудь?

Tag.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. namespace medeyacom\blog\models;
  4.  
  5.  
  6. use Yii;
  7.  
  8. /**
  9.  * This is the model class for table "tag".
  10.  *
  11.  * @property integer $id
  12.  * @property string $name
  13.  */
  14. class Tag extends \yii\db\ActiveRecord
  15. {
  16.     /**
  17.      * @inheritdoc
  18.      */
  19.     public static function tableName()
  20.     {
  21.         return 'tag';
  22.     }
  23.  
  24.     /**
  25.      * @inheritdoc
  26.      */
  27.     public function rules()
  28.     {
  29.         return [
  30.             [['name'], 'required'],
  31.             [['name'], 'string', 'max' => 50],
  32.         ];
  33.     }
  34.  
  35.     /**
  36.      * @inheritdoc
  37.      */
  38.     public function attributeLabels()
  39.     {
  40.         return [
  41.             'id' => 'ID',
  42.             'name' => 'Name',
  43.         ];
  44.     }
  45. }
  46.  


Blog.php

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. namespace medeyacom\blog\models;
  5.  
  6. use common\components\behaviors\StatusBehavior;
  7. use Yii;
  8. use yii\behaviors\TimestampBehavior;
  9. use yii\db\ActiveRecord;
  10. use yii\db\Expression;
  11. use yii\helpers\ArrayHelper;
  12. use yii\helpers\Url;
  13. use yii\web\UploadedFile;
  14. use common\models\User;
  15. use common\models\ImageManager;
  16.  
  17. /**
  18.  * This is the model class for table "blog".
  19.  *
  20.  * @property integer $id
  21.  * @property string $title
  22.  * @property string $text
  23.  * @property string $image
  24.  * @property string $url
  25.  * @property string $date_create
  26.  * @property string $date_update
  27.  * @property integer $status_id
  28.  * @property integer $sort
  29.  */
  30. class Blog extends ActiveRecord
  31. {
  32.     const STATUS_LIST = ['off','on'];
  33.     const IMAGES_SIZE = [
  34.         ['50','50'],
  35.         ['800',null],
  36.     ];
  37.     public $tags_array;
  38.     public $file;
  39.     public $newtags;
  40.  
  41.     /**
  42.      * @inheritdoc
  43.      */
  44.     public static function tableName()
  45.     {
  46.         return 'blog';
  47.     }
  48.  
  49.     public function behaviors()
  50.     {
  51.         return [
  52.             'timestampBehavior'=>[
  53.                 'class' => TimestampBehavior::className(),
  54.                 'createdAtAttribute' => 'date_create',
  55.                 'updatedAtAttribute' => 'date_update',
  56.                 'value' => new Expression('NOW()'),
  57.             ],
  58.             'statusBehavior'=>[
  59.                 'class' => StatusBehavior::className(),
  60.                 'statusList' => self::STATUS_LIST,
  61.             ]
  62.         ];
  63.     }
  64.  
  65.     /**
  66.      * @inheritdoc
  67.      */
  68.     public function rules()
  69.     {
  70.         return [
  71.             [['title', 'url'], 'required'],
  72.             [['text'], 'string'],
  73.             [['url'], 'unique'],
  74.             [['status_id', 'sort'], 'integer'],
  75.             [['sort'], 'integer', 'max'=>99, 'min'=>1],
  76.             [['title', 'url'], 'string', 'max' => 150],
  77.             [['image'], 'string', 'max' => 100],
  78.             [['file'], 'image'],
  79.             [['tags_array','date_create','date_update'], 'safe'],];
  80.     }
  81.  
  82.     /**
  83.      * @inheritdoc
  84.      */
  85.     public function attributeLabels()
  86.     {
  87.         return [
  88.             'id' => 'ID',
  89.             'title' => 'Заголовок',
  90.             'text' => 'Текст',
  91.             'url' => 'ЧПУ',
  92.             'status_id' => 'Статус',
  93.             'sort' => 'Сортировка',
  94.             'tags_array' => 'Теги',
  95.             'image' => 'Картинка',
  96.             'file' => 'Картинка',
  97.             'tagsAsString' => 'Теги',
  98.             'author.username' => 'Имя Автора',
  99.             'author.email' => 'Почта Автора',
  100.             'date_update' => 'Обновлено',
  101.             'date_create' => 'Создано',
  102.             'smallImage'=> 'Картинка',
  103.         ];
  104.     }
  105.  
  106.  
  107.     public function getAuthor(){
  108.         return $this->hasOne(User::className(),['id'=>'user_id']);
  109.     }
  110.     public function getImages()
  111.     {
  112.         return $this->hasMany(ImageManager::className(), ['item_id' => 'id'])->andWhere(['class'=>self::tableName()])->orderBy('sort');
  113.     }
  114.     public function getImagesLinks()
  115.     {
  116.         return ArrayHelper::getColumn($this->images,'imageUrl');
  117.     }
  118.     public function getImagesLinksData()
  119.     {
  120.         return ArrayHelper::toArray($this->images,[
  121.                 ImageManager::className() => [
  122.                     'caption'=>'name',
  123.                     'key'=>'id',
  124.                 ]]
  125.         );
  126.     }
  127.     public function getBlogTag(){
  128.         return $this->hasMany(BlogTag::className(),['blog_id'=>'id']);
  129.     }
  130.  
  131.     public function getTags()
  132.     {
  133.         return $this->hasMany(Tag::className(), ['id' => 'tag_id'])->via('blogTag');
  134.     }
  135.  
  136.     public function getTagsAsString()
  137.     {
  138.         $arr = \yii\helpers\ArrayHelper::map($this->tags,'id','name');
  139.         return implode(', ',$arr);
  140.     }
  141.  
  142.     public function getSmallImage()
  143.     {
  144.         if($this->image){
  145.             $path = str_replace('admin.','',Url::home(true)).'uploads/images/blog/50x50/'.$this->image;
  146.         }else{
  147.             $path = str_replace('admin.','',Url::home(true)).'uploads/images/ss.jpg';
  148.         }
  149.         return $path;
  150.     }
  151.  
  152.  
  153.   public function beforeDelete()
  154.      
  155.         {   if (parent::beforeDelete()) {
  156.                 $dir = Yii::getAlias('@images').'/blog/';
  157.              /*if($this->image != '')*/
  158.            if(!empty($this->image))
  159.             /* if($this->image && file_exists($dir.$this->image))*/
  160.         if (isset($this->image) && file_exists($idr.$this->image)){
  161.               unlink($dir.$this->image);
  162.                 }
  163.           /* if(file_exists($dir.$this->image)){
  164.                     unlink($dir.$this->image);
  165.                 }*/
  166.  
  167.  
  168.             foreach (self::IMAGES_SIZE as $size){
  169.                     $size_dir = $size[0].'x';
  170.             if($size[1] !== null)
  171.                         $size_dir .= $size[1];
  172.            /* if(file_exists($dir.$this->image)){
  173.                         unlink($dir.$size_dir.'/'.$this->image);
  174.                     }*/
  175.                 }
  176.        
  177.            BlogTag::deleteAll(['blog_id'=>$this->id]);
  178.            return true;
  179.                  } else {
  180.             return false;
  181.               }
  182.         }
  183.    
  184.  
  185.  
  186.     public function afterFind()
  187.     {
  188.        /* parent::afterFind();
  189.         $this->tags_array = $this->tags;*/
  190.         $this->newtags =\yii\helpers\ArrayHelper::map($this->tags,'tag','tag');
  191.     }
  192.  
  193.  
  194.   public function afterSave($insert, $changedAttributes)
  195.     {
  196.         parent::afterSave($insert, $changedAttributes);
  197.       /*  $arr = \yii\helpers\ArrayHelper::map($this->tags,'id','id');
  198.         foreach ($this->tags_array as $one){
  199.             if(!in_array($one,$arr)){
  200.                 $model = new BlogTag();
  201.                 $model->blog_id = $this->id;
  202.                 $model->tag_id = $one;
  203.                 $model->save();
  204.             }
  205.             if(isset($arr[$one])){
  206.                 unset($arr[$one]);
  207.             }*/
  208.  
  209.              if (is_array($this->newtags)) {
  210.                 $old_tags = ArrayHelper::map($this->tags,'tag','id');
  211.                 foreach ($this ->newtags as $one_new_tag) {
  212.                     if (isset($old_tags[$one_new_tag])) {
  213.                         unset($old_tags[$one_new_tag]);
  214.                    
  215.                     } else{
  216.                        if($tg = $this->createNewTag($one_new_tag)){
  217.                         Yii::$app->session->addFlash('success','добавлен тег' . $one_new_tag);
  218.                     }else{
  219.                         Yii::$app->session->addFlash('error','тег' . $one_new_tag . 'тег не добавился');
  220.                        }
  221.                     }
  222.                 }
  223.                
  224.         BlogTag::deleteAll(['and',['blog_id'=>$this->id],['tag_id'=>$old_tags]]);
  225.     }else{
  226.         BlogTag::deleteAll(['blog_id'=>$this->id]);
  227.        /* BlogTag::deleteAll(['tag_id'=>$arr]);*/
  228.     }
  229. }
  230.  
  231.  
  232.     private function createNewTag ($new_tag) {
  233.         if(!$tag = Tag::find()->andWhere(['tag'=>$new_tag])->one()){
  234.             $tag = new Tag();
  235.             $tag ->tag = $new_tag;
  236.             if(!$tag->save()) {
  237.                 $tag =null;
  238.             }
  239.         }
  240.         if ($tag instanceof Tag) {
  241.             $blog_tag = new BlogTag();
  242.             $blog_tag->blog_id = $this->id;
  243.             $blog_tag->tag_id = $tag->id;
  244.             if($blog_tag->save())
  245.                 return $blog_tag->id;
  246.         }
  247.         return false;
  248.     }
  249.  
  250.  
  251.  
  252.  
  253.     public function beforeSave($insert)
  254.     {
  255.         if($file = UploadedFile::getInstance($this, 'file')){
  256.             $dir = Yii::getAlias('@images').'/blog/';
  257.             if(file_exists($dir.$this->image)){
  258.                 unlink($dir.$this->image);
  259.             }
  260.             if(file_exists($dir.'50x50/'.$this->image)){
  261.                 unlink($dir.'50x50/'.$this->image);
  262.             }
  263.             if(file_exists($dir.'800x/'.$this->image)){
  264.                 unlink($dir.'800x/'.$this->image);
  265.             }
  266.             $this->image = strtotime('now').'_'.Yii::$app->getSecurity()->generateRandomString(6)  . '.' . $file->extension;
  267.             $file->saveAs($dir.$this->image);
  268.             $imag = Yii::$app->image->load($dir.$this->image);
  269.             $imag->background('#fff',0);
  270.             $imag->resize('50','50', Yii\image\drivers\Image::INVERSE);
  271.             $imag->crop('50','50');
  272.             $imag->save($dir.'50x50/'.$this->image, 90);
  273.             $imag = Yii::$app->image->load($dir.$this->image);
  274.             $imag->background('#fff',0);
  275.             $imag->resize('800',null, Yii\image\drivers\Image::INVERSE);
  276.             $imag->save($dir.'800x/'.$this->image, 90);
  277.         }
  278.         return parent::beforeSave($insert);
  279.     }
  280.  
  281.  
  282.  }
  283.  
  284.  
  285.  

Прикреплено изображение (Нажмите для увеличения)
au2.jpg

(Отредактировано автором: 25 Августа, 2017 - 22:59:32)

 
 Top
Sandro_s
Отправлено: 25 Августа, 2017 - 22:48:18
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




.
Прикреплено изображение (Нажмите для увеличения)
au1.jpg
 
 Top
andrewkard
Отправлено: 26 Августа, 2017 - 12:01:33
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Вы используете ActiveRecord, соотв. нужно иметь такую колонку в БД
 
 Top
Sandro_s
Отправлено: 26 Августа, 2017 - 18:17:02
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




andrewkard пишет:
Вы используете ActiveRecord, соотв. нужно иметь такую колонку в БД


Какую колонку именно? В БД есть таблица Тag. Ошибка указывает на то, что в модели Tag нет атрибута tag. В ней есть id есть name, а tag нету. Но вот тут (в тексте ошибки есть четко файл и номер строки, которая вызвала ошибку):

CODE (htmlphp):
скопировать код в буфер обмена
  1. $this->newtags =\yii\helpers\ArrayHelper::map($this->tags,'tag','tag');


т.е. я пытаюсь обратиться к несуществующему атрибуту. Но как это исправить?
Прикреплено изображение (Нажмите для увеличения)
b1.jpg

(Отредактировано автором: 26 Августа, 2017 - 18:17:29)

 
 Top
andrewkard
Отправлено: 27 Августа, 2017 - 18:57:00
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Sandro_s пишет:
Но вот тут (в тексте ошибки есть четко файл и номер строки, которая вызвала ошибку):

нужно смотреть на свойство $this->tags, и судя по методу getTags() в этом свойстве будут строки AR, модели Tag, далее смотрим что делает ArrayHelper::map, она пытается создать карту из массива $this->tags с ключами (в данном случае атрибутами) tag tag, которого в модели Tag нет, об этом и ошибка.
(Добавление)
Sandro_s пишет:
Но как это исправить?

Нужно понять что Вы хотите видеть в $this->newtags
 
 Top
Sandro_s
Отправлено: 28 Августа, 2017 - 19:39:43
Post Id


Новичок


Покинул форум
Сообщений всего: 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'. Ошибка исчезла, только теги не сохраняются и не создаются новые.

Tag.php

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. namespace medeyacom\blog\models;
  4.  
  5.  
  6. use Yii;
  7.  
  8. /**
  9.  * This is the model class for table "tag".
  10.  *
  11.  * @property integer $id
  12.  * @property string $name
  13.  * @property string $tag
  14.  */
  15. class Tag extends \yii\db\ActiveRecord
  16. {
  17.     /**
  18.      * @inheritdoc
  19.      */
  20.     public static function tableName()
  21.     {
  22.         return 'tag';
  23.     }
  24.  
  25.     /**
  26.      * @inheritdoc
  27.      */
  28.     public function rules()
  29.     {
  30.         return [
  31.             [['name'], 'required'],
  32.             [['name'], 'string', 'max' => 50],
  33.             [['tag'], 'safe'],
  34.         ];
  35.     }
  36.  
  37.     /**
  38.      * @inheritdoc
  39.      */
  40.     public function attributeLabels()
  41.     {
  42.         return [
  43.             'id' => 'ID',
  44.             'name' => 'Name',
  45.             'tag' => 'теги',
  46.         ];
  47.     }
  48. }
  49.  

Прикреплено изображение (Нажмите для увеличения)
1comm — копия.jpg

(Отредактировано автором: 28 Августа, 2017 - 19:41:34)

 
 Top
andrewkard
Отправлено: 28 Августа, 2017 - 20:52:24
Post Id


Участник


Покинул форум
Сообщений всего: 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' в таблицу

это не нужно
 
 Top
Sandro_s
Отправлено: 28 Августа, 2017 - 21:31:07
Post Id


Новичок


Покинул форум
Сообщений всего: 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'

PHP:
скопировать код в буфер обмена
  1.  public function afterFind()
  2.     { $this->newtags = \yii\helpers\ArrayHelper::map($this->tags, 'tag','tag');
  3. }
  4.  


Попробую объяснить как бы хотелось реализовать этот метод, хотя сам не оч.понимаю логику))
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".
 
 Top
andrewkard
Отправлено: 28 Августа, 2017 - 22:02:48
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Sandro_s пишет:
это так надо для Select 2

а не name name ?
(Добавление)
а, я понял, afterFind нужен, в нем Вы хотите наполнить свойство $this->newtags, но тогда таг Вам не нужен, а name
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. public function afterFind()
  3.     { $this->newtags = \yii\helpers\ArrayHelper::map($this->tags, 'name'','name');
  4. }
  5.  


или что в нем, в этом name ? название его какое то или все же значение

(Отредактировано автором: 29 Августа, 2017 - 09:09:02)

 
 Top
Sandro_s
Отправлено: 01 Сентября, 2017 - 17:09:54
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




andrewkard пишет:
Sandro_s пишет:
это так надо для Select 2

а не name name ?
(Добавление)
а, я понял, afterFind нужен, в нем Вы хотите наполнить свойство $this->newtags, но тогда таг Вам не нужен, а name
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. public function afterFind()
  3.     { $this->newtags = \yii\helpers\ArrayHelper::map($this->tags, 'name'','name');
  4. }
  5.  


или что в нем, в этом name ? название его какое то или все же значение


Да, верно, по идее свойство $this->newtags нужно наполнить, но
так я уже пробовал с "name' - теги не сохраняются.

Если смотрепть в логах 2 metod POST admin.site.com/blog/blog/update?id=5 то там явно ошибка проблема со связью последняя строчка логов "0=1" - это явно ошибка.(скрин внизу) на строке 230 там:
PHP:
скопировать код в буфер обмена
  1.  
  2. BlogTag::deleteAll(['and',['blog_id'=>$this->id],['tag_id'=>$old_tags]]);
  3.  


метод aftersafe (первый кусок кода я закомм. - этот другой метод, при котором все работает, теги сохраняются, но новые не создаются)

PHP:
скопировать код в буфер обмена
  1. public function afterSave($insert, $changedAttributes)
  2.     {
  3.         parent::afterSave($insert, $changedAttributes);
  4.     /*   $arr = \yii\helpers\ArrayHelper::map($this->tags,'id','id');
  5.         foreach ($this->tags_array as $one){
  6.             if(!in_array($one,$arr)){
  7.                 $model = new BlogTag();
  8.                 $model->blog_id = $this->id;
  9.                 $model->tag_id = $one;
  10.                 $model->save();
  11.             }
  12.             if(isset($arr[$one])){
  13.                 unset($arr[$one]);
  14.             }*/
  15.  
  16.             if (is_array($this->newtags)) {
  17.                 $old_tags = ArrayHelper::map($this->tags,'tag','id');
  18.                 foreach ($this ->newtags as $one_new_tag) {
  19.                     if (isset($old_tags[$one_new_tag])) {
  20.                         unset($old_tags[$one_new_tag]);
  21.                       } else{
  22.                        if($tg = $this->createNewTag($one_new_tag)){
  23.                         Yii::$app->session->addFlash('success','добавлен тег' . $one_new_tag);
  24.                     }else{
  25.                         Yii::$app->session->addFlash('error','тег' . $one_new_tag . 'тег не добавился');
  26.                        }
  27.                     }
  28.                 }
  29.                
  30.    BlogTag::deleteAll(['and',['blog_id'=>$this->id],['tag_id'=>$old_tags]]);
  31.     }else{
  32.         BlogTag::deleteAll(['blog_id'=>$this->id]);
  33.      /*  BlogTag::deleteAll(['tag_id'=>$arr]);*/
  34.     }
  35. }


стр.95 BlogControler

CODE (htmlphp):
скопировать код в буфер обмена
  1. if ($model->load(Yii::$app->request->post()) && $model->save()) {
  2.  


CODE (htmlphp):
скопировать код в буфер обмена
  1. public function actionUpdate($id)
  2.     {
  3.         $model = $this->findModel($id);
  4.  
  5.         if ($model->load(Yii::$app->request->post()) && $model->save()) {
  6.            return $this->redirect(['view', 'id' => $model->id]);
  7.         } else {
  8.             return $this->render('update', [
  9.                 'model' => $model,
  10.             ]);
  11.         }
  12.     }

(Добавление)
Сейчас я пробую подключить просто готовый модуль тег (но раньше никогда этого не делал)

Вот у меня скачался сам модуль через composer update https://github[dot]com/wokster/yii2-tags-moduleа а дальше как..не разберусь пока

как подключать, вроде бы здесь или нет? https://github[dot]com/wokster/yii2-[dot][dot][dot]ster/Article.php
https://github.com/wokster/yii2-article/blob/master/views/article/_form.php
Прикреплено изображение (Нажмите для увеличения)
4.jpg

(Отредактировано автором: 01 Сентября, 2017 - 17:16:18)

 
 Top
andrewkard
Отправлено: 01 Сентября, 2017 - 18:37:14
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Sandro_s пишет:
как подключать, вроде бы здесь или нет?

Цитата:

Usage

coming soon

А вообще то подключать ничего не нужно, просто используйте (хотя на первый взгляд он сыроват),
Зачем он Вам только.
Всего то что нужно 3 модели, Блог, Таг, ТагФорм, в Блоге делаете связь гетТагс, блог->тагс будут тэги блога. Форма на создание и редактирования тага, Таг, это модель АР, три поля, id,tag,blog_id
Все это делается за 5 мин с помощью Гии
 
 Top
Sandro_s
Отправлено: 01 Сентября, 2017 - 22:45:25
Post Id


Новичок


Покинул форум
Сообщений всего: 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



стр 211 init.php
CODE (htmlphp):
скопировать код в буфер обмена
  1.   $content = preg_replace('/(("|\')cookieValidationKey("|\')\s*=>\s*)(""|\'\')/', "\\1'$key'",


CODE (htmlphp):
скопировать код в буфер обмена
  1. function setCookieValidationKey($root, $paths)
  2. {
  3.     foreach ($paths as $file) {
  4.         echo "   generate cookie validation key in $file\n";
  5.         $file = $root . '/' . $file;
  6.         $length = 32;
  7.         $bytes = openssl_random_pseudo_bytes($length);
  8.         $key = strtr(substr(base64_encode($bytes), 0, $length), '+/=', '_-.');
  9.         $content = preg_replace('/(("|\')cookieValidationKey("|\')\s*=>\s*)(""|\'\')/', "\\1'$key'", file_get_contents($file));
  10.         file_put_contents($file, $content);
  11.     }
  12. }

Прикреплено изображение (Нажмите для увеличения)
6.jpg

(Отредактировано автором: 01 Сентября, 2017 - 23:31:40)

 
 Top
andrewkard
Отправлено: 02 Сентября, 2017 - 14:16:16
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Sandro_s пишет:
file_get_contents(D:/sites/interjobs/backend/config/main-local.php):

файл есть? права?
 
 Top
Sandro_s
Отправлено: 02 Сентября, 2017 - 22:00:58
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




andrewkard пишет:
Sandro_s пишет:
file_get_contents(D:/sites/interjobs/backend/config/main-local.php):

файл есть? права?


У меня пока недостаточно сообщений, чтобы Вам '+" поставить) но вопросы есть ещё))


Этот файл при установке в игнор попал- и я вставил его из другого проекта- Admin LTE появилась..но зарегистрироваться нельзя и я, чтобы зайти- скопировал данные админа из другой базы, но это, наверное, не правильно..Cейчас, получается, любой пользователь зарег. во fronted может зайти и в backend.


И вот теперь, чтобы cлева link 'Tеги' появился, как я понимаю -надо в backand/veiws/layouts/left.php вписать <code lang="php">
['label' => 'Теги', 'icon' => 'tags', 'url' => ['/tag']],
</code> а что ещё нужно подключить?

(Отредактировано автором: 02 Сентября, 2017 - 22:07:41)

 
 Top
andrewkard
Отправлено: 03 Сентября, 2017 - 10:32:45
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Sandro_s пишет:
а что ещё нужно подключить?

Теперь в бэкенде нужен ТагКонтроллер с нужной Вам логикой. Я так понимаю нужен КРУД, тогда сгенерируйте его с помощью Гии
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« CMS и фреймворки »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB