Вопрос к знатокам компонент costa-rico/yii2-images

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
nekit44
Сообщения: 125
Зарегистрирован: 2015.10.27, 13:14

Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение nekit44 »

Приветствую

при работе использую компонент costa-rico/yii2-images очень нравится и все устраивает но печалит пара моментов не понимаю как их решить, решил обратиться к сообществу, буду рад любой помощи и пинку в нужном направлении

вопрос первый:
url изображения формируется вида: http://my-home-server.it/yii2images/ima ... 50x300.jpg
Как бы убрать из директории "yii2images"
если это возможно

и второй вопрос вытекает из первого при переходе в по адресу
http://my-home-server.it/yii2images/images/
сайт отдает:
Hello, man. It's ok, dont worry.
А если перейти по адресу http://my-home-server.it/yii2images
сайт отдает:
yii2images/default/index
This is the view content for action "index". The action belongs to the controller "rico\yii2images\controllers\DefaultController" in the "yii2images" module.

You may customize this page by editing the following file:
C:\wamp\www\work-dep\vendor\costa-rico\yii2-images\views\default\index.php
Ни есть гуд наверно это модуль который я не хотел бы показывать, как его скрыть, редиректом?

Спасибо
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение Onotole »

Настроить роуты
nekit44
Сообщения: 125
Зарегистрирован: 2015.10.27, 13:14

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение nekit44 »

Извините за мою глупость, можете более подробно описать как сделать
Спасибо

UPD:

Решил сам:

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

'image' => 'yii2images/images/image-by-item-and-alias', 
nekit44
Сообщения: 125
Зарегистрирован: 2015.10.27, 13:14

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение nekit44 »

Еще вопрос, подскажите пожалуйста может кто сталкивался

у costa-rico/yii2-images используется обычный:

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

<?= $form->field($model, 'image')->fileInput() ?>
А можно ли этот элемент расширить чтобы можно было выбирать не одно изображение а много? Нет ли подходящего компонента?
Спасибо
_XAPOH_
Сообщения: 49
Зарегистрирован: 2016.04.01, 08:24

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение _XAPOH_ »

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

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
            <?= $form->field($model, 'file[]')->fileInput(['multiple' => true]); ?>
<?php ActiveForm::end(); ?>
и в модели нужно еще

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

[['file'], 'file', 'maxFiles' => 10], 

можно не 10, можно больше или меньше
nekit44
Сообщения: 125
Зарегистрирован: 2015.10.27, 13:14

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение nekit44 »

_XAPOH_ , спасибо за совет!
Буду разбираться как сделать, из формы передалось 2 файла, уже супер))
_XAPOH_
Сообщения: 49
Зарегистрирован: 2016.04.01, 08:24

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение _XAPOH_ »

nekit44 писал(а):_XAPOH_ , спасибо за совет!
Буду разбираться как сделать, из формы передалось 2 файла, уже супер))
Забыл, еще в контроллере в место UploadedFile::getInstance($model, 'file') нужно UploadedFile::getInstances($model, 'file'), ну и цикл.

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

$model->file = UploadedFile::getInstances($model, 'file');

            if ($model->file && $model->validate()) {
                foreach ($model->file as $file) {
                    $file->saveAs($model->rus2translit('uploads/' . $photoName . '_' .$file->baseName . '.' . $file->extension)); 
nekit44
Сообщения: 125
Зарегистрирован: 2015.10.27, 13:14

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение nekit44 »

_XAPOH_, спасибо реально все работает.
Единственное я не могу догнать, как делать удаление фото
в документации:

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

//Returns main model image
$image = $model->getImage();

if($image){
    //get path to resized image 
    echo $image->getPath('400x300');

    //path to original image
    $image->getPathToOrigin();

    //will remove this image and all cache files
    $model->removeImage($image);
}
 
https://packagist.org/packages/costa-rico/yii2-images

Это делается экшеном?
nekit44
Сообщения: 125
Зарегистрирован: 2015.10.27, 13:14

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение nekit44 »

Сделал так:

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

public function actionDeleteimg($id)
    {
        $model = $this->findModel($id);
        $image = $model->getImage();

        if($image) {
            //get path to resized image
            $model->removeImage($image);
        }
    }
 
Ошибка preg_match(): No ending delimiter '/' found
скрин: https://yadi.sk/i/LacrpSPrryc7y

как я понял не находит слеш, так как я на винде у меня слеши в обратную сторону предположу что на серваке в итоге будет норм работать
Только получается что удаляет первую картинку
Вопрос: как удалить определенную картинку??
_XAPOH_
Сообщения: 49
Зарегистрирован: 2016.04.01, 08:24

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение _XAPOH_ »

nekit44 писал(а):Сделал так:

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

public function actionDeleteimg($id)
    {
        $model = $this->findModel($id);
        $image = $model->getImage();

        if($image) {
            //get path to resized image
            $model->removeImage($image);
        }
    }
Ошибка preg_match(): No ending delimiter '/' found
скрин: https://yadi.sk/i/LacrpSPrryc7y

как я понял не находит слеш, так как я на винде у меня слеши в обратную сторону предположу что на серваке в итоге будет норм работать
Только получается что удаляет первую картинку
Вопрос: как удалить определенную картинку??
Как удалить определенную картинку не знаю, но все удалить можно вот так

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

public function actionDeleteimg($id)
    {
        $model = $this->findModel($id);
        $image = $model->getImages();

        if($image) {
            //get path to resized image
            $model->removeImages();
        }
        return $this->redirect(['view', 'id' => $model->id]);
    } 
во view

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

<?= Html::a('Delete images', ['deleteimg', 'id' => $model->id], [
            'class' => 'btn btn-danger',
            'data' => [
                'confirm' => 'Are you sure you want to delete this item?',
                'method' => 'post',
            ],
        ]) ?>
Конечно если картинок много, то это не выход, но в моем случае такое решение было приемлемо.
А вы не нашли способа удалять определенное изображение ?
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение andku83 »

Для работы со множеством изображений понравилось - https://github.com/zxbodya/yii2-gallery-manager

Насчет этого расширения, может кому пригодится:
Поведение наследуется от costa-rico и добавляет методы:
  • - удаление изображений и каталога текущей модели из хранилища
    - загрузка файла с именем image
    - удаление файла с именем image

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

<?php
namespace common\behaviors;

use rico\yii2images\behaviors\ImageBehave;
use rico\yii2images\models\Image;
use Yii;
use yii\db\ActiveRecord;
use yii\helpers\BaseFileHelper;
use yii\web\UploadedFile;

/**
 * Class ImageBehavior
 * @package common\behaviors
 * @author Andrey Kushnarev <andreykushnarev83@gmail.com>
 */
class ImageBehavior extends ImageBehave
{
    public $component;

    public function events()
    {
        return [
            ActiveRecord::EVENT_AFTER_INSERT => 'afterSave',
            ActiveRecord::EVENT_AFTER_UPDATE => 'afterSave',
            ActiveRecord::EVENT_AFTER_DELETE => 'afterDelete'
        ];
    }

    /**
     *
     */
    public function afterSave()
    {
        $this->upload();
    }

    /**
     *
     */
    public function afterDelete()
    {
        $this->removeImages();
        $storePath = $this->getModule()->getStorePath($this->owner);
        $pictureSubDir = $this->getModule()->getModelSubDir($this->owner);
        $dirToRemove = $storePath . DIRECTORY_SEPARATOR . $pictureSubDir;
        BaseFileHelper::removeDirectory($dirToRemove);
    }

    /**
     * @param string $name
     * @return bool
     */
    public function upload($name = 'image'){
        $image = UploadedFile::getInstance($this->owner, $name);
        if( $image ){
            $path = Yii::getAlias('@storage') . '/web/source/temp' . $image->baseName . '.' . $image->extension;
            $image->saveAs($path);
            $img = $this->getImageByName($name);
            if ($this->attachImage($path, true, $name) && $img instanceof Image){
                $this->removeImage($img);
            }
            @unlink($path);

            return true;
        }
        return false;
    }

    /**
     * @param string $name
     * @return bool
     */
    public function removeImageByName($name = 'image')
    {
        $image = $this->getImageByName($name);
        if ($image instanceof Image) {
            $this->removeImage($image);
            return true;
        }
        return false;
    }
}
Подключение к модели:

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

public function behaviors()
    {
        return [
            'image' => ImageBehavior::className(),
        ];
    }
 
Добавление экшена в контроллер для удаления картинки:

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

    public function actionRemoveImage($id)
    {
        $result = false;
        if ($model = $this->findModel($id)){
            $model->removeImageByName('image');
        }
        return $this->redirect(['update', 'id' => $model->id]);
    }
 
Инпут и просмотр изображения во вьюшке:

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

    <?= $form->field($model, 'image')->fileInput(['accept' => 'image/*']) ?>
    <?php if (!$model->isNewRecord && $model->getImage()): ?>
        <div class="preview">
            <?= Html::img($model->getImage()->getUrl()) ?>
            <?= Html::a('', ['remove-image', 'id' => $model->id], [
                'class' => 'glyphicon-remove-circle glyphicon',
                'data' => [
                    'confirm' => Yii::t('backend', 'Are you sure you want to delete this item?'),
                    'method' => 'post',
                ],
            ]) ?>
        </div>
    <?php endif; ?>
Стили для превью и кнопки удаления:

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

.preview {
  position: relative;
  height: 300px;
  float: left;
  color: #999;
  border: 2px dashed #999;
  border-radius: 7px;
  margin: 0 0 10px 5px;
}
.preview img {
  width: auto;
  height: 100%;
  border-radius: 7px;
}
.preview .glyphicon-remove-circle {
  display: none;
  cursor: pointer;
  font-size: 3em;
  text-align: center;
  top: 50%;
  left: 50%;
  width: 50px;
  height: 50px;
  margin-left: -25px;
  background-color: rgba(0,0,0,.8);
  padding: 4px;
  border-radius: 5px;
  color: #FFF;
  margin-top: -.5em;
  position: absolute;
}
.preview:hover .glyphicon-remove-circle {
  display: block;
}
rosolovsky
Сообщения: 119
Зарегистрирован: 2014.06.23, 11:44
Откуда: Украина

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение rosolovsky »

А вот где прочитать вот про эту часть хелпера Html::a ?

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

'data' => [
     'confirm' => 'Are you sure you want to delete this item?',
     'method' => 'post',
   ],
В документации по хелперах я этого не смог найти? Где полностью посмотреть дополнительные параметры хелперов?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение ElisDN »

rosolovsky писал(а):Где полностью посмотреть дополнительные параметры хелперов?
Других полезных нет. Только data-method, data-confirm и data-params из https://github.com/yiisoft/yii2/blob/ma ... ets/yii.js
lucky
Сообщения: 80
Зарегистрирован: 2015.03.06, 20:06

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение lucky »

Так как же все-таки реализовать удаление определенной картинки? Может есть действующий пример?
alexnew2000
Сообщения: 104
Зарегистрирован: 2015.10.04, 09:47

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение alexnew2000 »

lucky писал(а):Так как же все-таки реализовать удаление определенной картинки? Может есть действующий пример?

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

   public function actionDeleteimg($id_reshenie, $id_img)
    {          
         $reshenie = Reshenie::find()
                ->where(['id' => $id_reshenie])
                ->one();
          
        $images = $reshenie->getImages();
        foreach($images as $img){            
            if($img->id==$id_img){
                $reshenie->removeImage($img);                
            }        
        }    
        $success=true;
        return json_encode($success);
    }    

 
lucky
Сообщения: 80
Зарегистрирован: 2015.03.06, 20:06

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение lucky »

Спасибо. А не могли бы view файл показать?
alexnew2000
Сообщения: 104
Зарегистрирован: 2015.10.04, 09:47

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение alexnew2000 »

lucky писал(а):Спасибо. А не могли бы view файл показать?
Вот урок в ссылке. Там и модель и view и показ рисунков и ajax удаление.
http://ftask.ru/2017/01/06/costa-ricoyii2-images/
lucky
Сообщения: 80
Зарегистрирован: 2015.03.06, 20:06

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение lucky »

Огромное Вам спасибо! Разобрался! :D
kloga4ev
Сообщения: 1
Зарегистрирован: 2017.01.15, 13:56

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение kloga4ev »

alexnew2000 писал(а): 2017.01.06, 16:05
lucky писал(а):Спасибо. А не могли бы view файл показать?
Вот урок в ссылке. Там и модель и view и показ рисунков и ajax удаление.
http://ftask.ru/2017/01/06/costa-ricoyii2-images/
Ссылка не рабочая(((
Может кто нить поможет, я так и не нашел решения по удалению файла.
alexnew2000
Сообщения: 104
Зарегистрирован: 2015.10.04, 09:47

Re: Вопрос к знатокам компонент costa-rico/yii2-images

Сообщение alexnew2000 »

kloga4ev писал(а): 2017.01.15, 13:59 Ссылка не рабочая(((
Может кто нить поможет, я так и не нашел решения по удалению файла.
Только что проверил.... ссылка рабочая. В crome только что перешел.
Ответить