Условия обработки персональных данных

Сайт использует технические и персональные данные пользователей для получения маркетинговой и статистической информации. Условия обработки персональных данных посетителей можно ознакомиться по ссылке.

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

X

Yii2 — Несколько полезных фитч для компонента costa-rico/yii2-images

Маленькое резюме- текущая статья устарела в начале 2018 года, когда переписали это расширение. здесь можно взять общую организацию проекта. Я как автор опасаюсь, что вас веду в заблуждение. Если я опять возьмусь за разработку на Yii2- обязательно скорректирую эту статью, но с новым кодом. Если у вас есть конкретные корректировки- присылайте, я буду благодарен и будут благодарны многочисленные читатели этой статьи.
——————
Это настройки в файл web

То что надо добавить в модель

вывод всех картинок (для fanibox) (во view)

вывод всех картинок с последующим удалением через ajax

вот сам ajax в Jquery

вот экшин для удаления 1 фото

екшин для создания записи

a это прописываем в _form.php для загрузки

Небольшой комментарий по поводу кода Url::toRoute (Добавлено из-за вопроса в комментариях)

Команда

Даёт такую строку
/reshenie/deleteimg?id_reshenie=60&id_img=23

По ней мы обращаемся к контроллеру reshenie и к экшину deleteimg (прописал ручками- не GII). Кроме этого в экшин передаётся 2 параметра (смотрите функцию actionDeleteimg ниже) id_reshenie=60 и id_img=23 . id_reshenie — это просто id модели , id_img- это id внутри компонента рисунков.

вот контроллер, более в целом виде :

Вывод рисунков в DetailView::widget

Всего комментариев: 23

  1. Михаил /

    Здравствуйте! В пункте, где у вас описан вывод всех картинок с последующим удалением через ajax, есть строка:
    $url_delete=Url::toRoute([‘reshenie/deleteimg’, ‘id_reshenie’ => $model->id, ‘id_img’ => $img_g->id]); //настройка роутера на нужный урл
    Подскажите что надо написать вместо reshenie/deleteimg — путь к контроллеру, виду или модели?

    1. alex / Автор записи

      Сдублировал в низ статьи -Если не помогло, отпишитесь конкретно.

      Команда
      Url::toRoute([‘reshenie/deleteimg’, ‘id_reshenie’ => $model->id, ‘id_img’ => $img_g->id])
      Даёт такую строку
      /reshenie/deleteimg?id_reshenie=60&id_img=23

      По ней мы обращаемся к конроллеру reshenie и к экшину deleteimg (прописал ручками- не GII). Кроме этого в экшин передаётся 2 параметра (смотрите функцию actionDeleteimg ниже) id_reshenie=60 и id_img=23 . id_reshenie — это просто id модели , id_img- это id внутри компонента рисунков.

      вот контроллер, более в целом виде

      class ReshenieController extends Controller
      {
      …..
      // эту фукнцию прописываем ручками
      public function actionDeleteimg($id_reshenie, $id_img)
      {
      ……
      }
      // вот обычный экшин, которые создается в GII
      public function actionView($id)
      {
      ….
      }
      }

  2. Михаил /

    Здравствуйте! Спасибо за помощь! Все получилось. У меня есть еще один вопрос, может сможете мне помочь, у меня есть файл view созданный через GII, там вывод данных идет через DetailView::widget, так вот я хочу в этом файле вывести массив с фотографиями находящиеся в галерее, как это правильно сделать не совсем понимаю. Я попытался сделать, но у меня выводит только одно фото, а не цикл.
    Файл приложу, может так понятнее будет https://yadi.sk/d/_qDhP1lv3Ecsaf

    1. alex / Автор записи

      Вы используете при выводе $img = $model->getImage() . Это переменная для вывода главной фотки. Я добавил в урок внизу правильный вывод всех фоток в DetailView::widget. Вот команда для их получения $gallery = $model->getImages(); , и это массив объектов !! А в первом варианте это просто один объект с главной фоткой.

      1. Михаил /

        У меня там задано две переменные, одна, как Вы правильно сказали для вывода главной фотографии $img = $model->getImage(), и другая переменная на следующей строке getImages(); ?>, где уже хранятся файлы галереи.
        Там в файле я описываю цикл:
        getImages(); ?>
        $item,
        ]);
        }
        ?>
        Но при всем этом выводится только одно фото, а их там три, но при распечатке массива $images видно что передаются все три фотографии.

      2. Михаил /

        Не получилось вставить код, посмотрите пожалуйста в файле строки с 29 по 40, и с 69 по 74 строку.

        1. alex / Автор записи

          Вы для начала без виджета попробуйте вывести фотки.
          Хотя бы так:
          цикл начало
          img src=’< ?=$img->getUrl(x300)?>’
          цикл конец
          Если вывелись в цикле- то надо смотреть что c виджетом.

          а вот этот код закомментируйте… он пока не важен

          $images = »;

          foreach($gallery as $item) {
          $images .= DetailView::widget([
          ‘model’ => $item,
          ]);
          }

          debug($images);

          1. Михаил /

            Написал такой цикл:
            foreach($gallery as $img):
            Html::a(Html::img($img->getUrl(‘x100’)));
            php endforeach;
            Через него все три фотографии выводятся, но как мне этот цикл теперь поместить в DetailView::widget

        2. alex / Автор записи

          Для начала засуньте ваш цикл в переменную
          $img_str=»;
          foreach($gallery as $img2){
          $img_str.=Html::a(Html::img($img2->getUrl(‘x100’)));
          }
          echo $img_str;

          1. Михаил /

            Благодаря Вам все получилось, еще раз большое спасибо за оказанную помощь!

  3. Александр /

    Подскажите, пожалуйста, как можно добавить к фото комментарий?
    Т.е. когда пользователь загружает документ, нужно что бы он ещё и оставил комментарий к этому документу.

    1. alex / Автор записи

      Здравствуйте. Тут мне видится 3 варианта событий. 1) Вам придется прилично переписать данное расширение под себя 2) Создать отдельную таблицу с комментариями и создать для неё модель, Потом сохранять комментарий после сохранения изображения 3) добавить к табличке Image дополнительное поле , создать модель для image через crud . И после отработки расширения costarico дозаписывать 1 поле, стараясь не затереть остальные.

  4. Евгений /

    Почему-то удаление не работает: ни один рисунок не удаляет, ни все изображения. Ругается на Url::toRoute([‘reshenie/deleteimg’, ‘id_reshenie’ => $model->id, ‘id_img’ => $img_g->id]) В чём может быть причина?

    1. alex / Автор записи

      вы в ручную урл создайте и потестируйте. строка должна быть что то типо этой /вашконтроллер/deleteimg?id_reshenie=60&id_img=23

  5. Евгений /

    Простите, я чайничек, как в ручную? Разве не должно у меня работать, если я всё так же прописал?

  6. Евгений /

    Без этой строчки появляются картинки с крестиками. А можно эту строчку заменить?

  7. Евгений /

    Внимательно перечитал ваш коментарий про Url::toRoute([‘reshenie/deleteimg’, ‘id_reshenie’ => $model->id, ‘id_img’ => $img_g->id])
    где class ReshenieController extends Controller самый главный контроллер
    +добавил use yii\helpers\Url; вверху — всё заработало. Большое вам спасибо!!!

  8. Вит /

    есть ли правило для urlManager что бы избавиться эт этого страшного урла
    site.tu/yii2images/images/image-by-item-and-alias?item=Pedigrees1&dirtyAlias=9c45049ac6-1_300.jpg ?
    можно лишь частично зарезать,
    ‘image’ => ‘yii2images/images/image-by-item-and-alias’,
    но как то тоже не очень. особенно после прикручевания RBAC

    1. alex / Автор записи

      По идее можно использовать ваш rules . Но чую, что вам поведение придется переписывать под себя. Пользы своим ответом я вам не принесу. Копайте код.

  9. Артем /

    Добрый день. Подскажите, как можно редактировать галерею, то есть, добавлять в уже существующую галерею фото? Есть у меня 3 таблицы. 1) Товары, 2) Цвета ткани 3) Цвет-Товар. К каждому товару в каждом цвете можно создать галерею. Я создал галерею к цвету черный. Потом хочу дабавить 2 фотки к этому цвету. Если я создаю новую — создается новая запись в таблице Цвет-Товар и к этому id привязывается галерея. Мне же нужно задать id (image.itemId), к которому привяжется галерея.
    http://joxi.ru/ZrJ4nwBt1NVGk2
    http://joxi.ru/LmG4RwgtRpxXp2

    1. alex / Автор записи

      Вам нужно дописать этот компонент . В стандартном варианте(в момент написания статьи) галереи не поддерживаются. Уж извините. Посмотрите мой комментарий выше от 31.03.2017 18:13 .

  10. DeniS /

    Использую yii2 2.0.15.1
    Подключаю как указанно, добавляю по вьюху field($model, ‘image’)->fileInput()
    После сохранения статьи в папках и в базе пусто… Куда копать?

    1. alex / Автор записи

      Я уже по года как на Yii2 не писал, но в последний раз, когда загружал yii2-images, его кто то испортил . Я запустить не смог. Пришлось заменять тело скриптов на исходники 2-х летней давности. Тогда заработало. Думаю вам лучше написать загрузчик изображений самостоятельно. Это не так долго , но вы съэкономите потом не один день, используя свой код.

Комментирование закрыто