Связь загружаемого файла со статьей
Добавлено: 2019.12.28, 15:51
Здравствуйте.
Для редактирования статьи поставил pendalf89\filemanager\widgets\TinyMce Этот виджет меня обалдеть как устраивает создавая превьюшки разных размеров на лету, вставки их в текст, структура папок для загрузки как у меня в вордпресс, но есть один недостаток, куча фото загружается сами по себе и кроме как в теле статьи автоматом не выведешь.
Таким образом, нужна связь с ID статьи.
Имеется модель статей Article.
В виджете есть модель Mediafile. Добавил в таблицу колонку article_id
Связь между ними создал id = article_id
А вот как сохранить в article_id id статьи к которой загружается файл не понимаю как сделать, по тем примерам, что в документации и гугле нашел ничего не получается.
Вот содержимое Mediafile
Контролер для загрузки фалов FileController
Для редактирования статьи поставил pendalf89\filemanager\widgets\TinyMce Этот виджет меня обалдеть как устраивает создавая превьюшки разных размеров на лету, вставки их в текст, структура папок для загрузки как у меня в вордпресс, но есть один недостаток, куча фото загружается сами по себе и кроме как в теле статьи автоматом не выведешь.
Таким образом, нужна связь с ID статьи.
Имеется модель статей Article.
В виджете есть модель Mediafile. Добавил в таблицу колонку article_id
Связь между ними создал id = article_id
А вот как сохранить в article_id id статьи к которой загружается файл не понимаю как сделать, по тем примерам, что в документации и гугле нашел ничего не получается.
Вот содержимое Mediafile
Код: Выделить всё
<?php
namespace pendalf89\filemanager\models;
use backend\models\Article;
use Yii;
use yii\web\UploadedFile;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\imagine\Image;
use yii\data\ActiveDataProvider;
use yii\helpers\Html;
use yii\helpers\Inflector;
use pendalf89\filemanager\Module;
use pendalf89\filemanager\models\Owners;
use Imagine\Image\ImageInterface;
...
class Mediafile extends ActiveRecord
{
....
public function rules()
{
return [
[['filename', 'type', 'url', 'size'], 'required'],
[['url', 'alt', 'description', 'thumbs'], 'string'],
[['created_at', 'updated_at', 'size', 'article_id'], 'integer'],
[['filename', 'type'], 'string', 'max' => 255],
[['file'], 'file'],
[['tagIds'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => Module::t('main', 'ID'),
'article_id' => Module::t('main', 'ID article'),
'filename' => Module::t('main', 'filename'),
'type' => Module::t('main', 'Type'),
'url' => Module::t('main', 'Url'),
'alt' => Module::t('main', 'Alt attribute'),
'size' => Module::t('main', 'Size'),
'description' => Module::t('main', 'Description'),
'thumbs' => Module::t('main', 'Thumbnails'),
'created_at' => Module::t('main', 'Created'),
'updated_at' => Module::t('main', 'Updated'),
'tagIds' => Module::t('main', 'Tags'),
];
}
....
/**
* Save just uploaded file
* @param array $routes routes from module settings
* @param bool $rename
* @return bool
*/
public function saveUploadedFile(array $routes, $rename = false)
{
$year = date('Y', time());
$month = date('m', time());
$structure = "$routes[baseUrl]/$routes[uploadPath]/$year/$month";
$basePath = Yii::getAlias($routes['basePath']);
$absolutePath = "$basePath/$structure";
// create actual directory structure "yyyy/mm"
if (!file_exists($absolutePath)) {
mkdir($absolutePath, 0777, true);
}
// get file instance
$this->file = UploadedFile::getInstance($this, 'file');
//if a file with the same name already exist append a number
$counter = 0;
do{
if($counter==0)
$filename = Inflector::slug($this->file->baseName).'.'. $this->file->extension;
else{
//if we don't want to rename we finish the call here
if($rename == false)
return false;
$filename = Inflector::slug($this->file->baseName). $counter.'.'. $this->file->extension;
}
$url = "$structure/$filename";
$counter++;
} while(self::findByUrl($url)); // checks for existing url in db
// save original uploaded file
$this->file->saveAs("$absolutePath/$filename");
$this->filename = $filename;
$this->type = $this->file->type;
$this->size = $this->file->size;
$this->url = $url;
return $this->save();
}....
Код: Выделить всё
.....
/**
* Provides upload file
* @return mixed
*/
public function actionUpload()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$model = new Mediafile();
/*$model->article_id = */
$routes = $this->module->routes;
$rename = $this->module->rename;
$tagIds = Yii::$app->request->post('tagIds');
if ($tagIds !== 'undefined') {
$model->setTagIds(explode(',', $tagIds));
}
$model->saveUploadedFile($routes, $rename);
$bundle = FilemanagerAsset::register($this->view);
if ($model->isImage()) {
$model->createThumbs($routes, $this->module->thumbs);
}
$response['files'][] = [
'url' => $model->url,
'thumbnailUrl' => $model->getDefaultThumbUrl($bundle->baseUrl),
'name' => $model->filename,
'type' => $model->type,
'size' => $model->file->size,
'deleteUrl' => Url::to(['file/delete', 'id' => $model->id]),
'deleteType' => 'POST',
];
return $response;
}
.....