1 Востаннє редагувалося snenko (08.04.2015 20:59:18)

Тема: завантажити десять фотографій через Zend_Form

привіт.
Нещодавно, почав працювати з Zend Framework.
Виникла необхідність завантажувати/видаляти десяток фотографій на формі.

Відповідно, скомпонував такий компонент

class S_Form_Element_Picture extends Zend_Form_Element_File
{
    public function init()
    {
        $this->setLabel('picture');
        $this->setMultiFile(10)
            ->addValidator('IsImage')
            ->setDestination(Zend_Registry::get('config')->uploads->galleryPhotoDir)
            ->setValueDisabled(true)
            ->setRequired(true)
            ->addValidator('Size', false, '2048000')
            ->addValidator('Extension', false, 'jpg,png,gif')
            ->addValidator(
                'ImageSize', false,
                array(
                     'minwidth'  => 280,
                     'minheight' => 192,
                     'maxwidth'  => 1500,
                     'maxheight' => 1500
                )
            );
    }
}

Получається, банальний список з десятьма кнопками "добавити фото". Тут легко заплутатись. Тому: Потрібна мініатюра, яка буде з’являтись після додання фото.

Думав, створити  компонент на основі двух частин:
Zend_Form_Element_File та Zend_Form_Element_Image. Але досвіду малувато. Словом, зовсім заплутався..
Задача не унікальна, і можливо, хтось зустрічав щось таке для zend?

дякую за увагу

2

Re: завантажити десять фотографій через Zend_Form

Вам потрібно рівно 10 фоток що б юзера завантажив, чи максимальна кількість 10?
Якщо чувак хоче 1ну завантажити або 2-3 ?
Я б зробив на фронтенді 2 поля для фоток і ще додатково значок + коли що б додати більше. При виборі кожної фотки зразу мініатюра показується.

3 Востаннє редагувалося snenko (09.04.2015 10:37:04)

Re: завантажити десять фотографій через Zend_Form

funivan написав:

Вам потрібно рівно 10 фоток що б юзера завантажив, чи максимальна кількість 10?

по-суті: кількість фоток має бути від 1 до бескінечності

funivan написав:

Я б зробив на фронтенді 2 поля для фоток і ще додатково значок + коли що б додати більше. При виборі кожної фотки зразу мініатюра показується.

Я теж задумувався над таким варіантом. Правда, ще не вмію js встроювати у zend_form_element*, але це справа часу.

Сподівався, що рішення має бути у вже готовому zend-компоненті, щоб не придумовувати "велосипед". Задача-то зустрічається чи не на всіх сайтах

4

Re: завантажити десять фотографій через Zend_Form

Вирішив вийти з положення, розбивши на дві частини:
1. додаю нове зображення
2. видаляю вже існуюче
Правда, ще маю визначитись з показом нових, щойнозавантажених картинок.
У всякому випадку, було би непогано знайти уже готове рішення
http://i.imgur.com/Uv3YJb4.png

5

Re: завантажити десять фотографій через Zend_Form

Завершуючи тему, може комусь знадобиться:

Створив декоратор "PictureCheck", що закріпив до

$checkpictures =
            (new Summers_Form_Element_CheckPicture('checkpictures'))
                    ->setDecorators(array(
                             'ViewHelper',
                             'PictureCheck',//<------------------------ ось тут мій декоратор
                             'Errors',
                             'HtmlTag',
                             'Label',));

назви зображень виступають як лейбли. і поскільки вони унікальні, то я просто занінюю їх на аналогічні з img-тегом:

<?php

class Summers_Form_Decorator_PictureCheck extends Zend_Form_Decorator_Abstract
{

    /**
     * Decorator rendering
     *
     * @param string $content
     *
     * @return string
     */
    public function render($content)
    {
        $element = $this->getElement();
        $s = $element->options;

        $dir = '/photos';

        if (!$s) return $content;

        $r=array();
        foreach ($s as $key => $value) {
            $r[$key]= "<img src=\"{$dir}/{$value}\"/>";
        }

        // s = array('image1.jpg', 'image2.jpg')
        // r = array('<img src="image1.jpg" />', '<img src="image2.jpg" />')
        //шукаємо в '$content' елементи масиву 's' і замінюємо їх елементами масиву 'r'
        $content = str_replace($s, $r, $content);

        return $content;
    }
}

?>

Хочу добавити для новачків, бо сам не міг порозуміти в чому причина:
Щоб не матюкалось на ваш декоратор(Exception caught by form: Plugin by name 'PictureCheck' was not found in the registry;), пропишить шлях до вашого декоратора у init форми $this->addPrefixPath('Summers_Form', 'Summers/Form');

Подякували: 0xDADA11C7, funivan2