ShopModxBox. Несколько картинок для одного товара

Здравствуйте! tv параметр image позволяет загрузить ОДНУ картинку к товару, вопрос, как через TV прикрутить несколько фото к одному товару? <body> <div class="img"> <a href="img/1.jpg" rel="example_group" id="adpdp14"> <img src="img/1.jpg" id="dp14" style="margin-bottom: 3px;" alt="" /></a> </div> <div class="thumbs"> <div class="it"><a style="display:none;" href="img/1.jpg" rel="example_group"></a> <img src="img/1.jpg" onclick='setBigImage(this);' alt="" /></div> <div class="it"><a style="display:none;" href="img/3.jpg" rel="example_group"></a> <img src="img/3.jpg" onclick='setBigImage(this);' alt="" /></div> <div class="it"><a style="display:none;" href="img/4.jpg" rel="example_group"></a> <img src="img/4.jpg" onclick='setBigImage(this);' alt="" /></div> <div class="it"><a style="display:none;" href="img/5.jpg" rel="example_group"></a> <img src="img/5.jpg" onclick='setBigImage(this);' alt="" /></div> <div class="it"><a style="display:none;" href="img/6.jpg" rel="example_group"></a> <img src="img/6.jpg" onclick='setBigImage(this);' alt="" /></div> <div class="it"><a style="display:none;" href="img/7.jpg" rel="example_group"></a> <img src="img/7.jpg" onclick='setBigImage(this);' alt="" /></div> <div class="clr"></div> </div>

</body> и чтобы в карточке товара эти фото привязывались {if $object.image} {assign var=src value=$object.image} {else} {assign var=src value=$object.imageDefault} {/if} <div class="span4"> <div class="row-fluid"> <div class="span8">
        <a href="{$object.image}">
            <img src="{snippet name=phpthumbof  params="input=`{$src}`&options=`w=200`"}" title="{field name=pagetitle}" align="left"/>
        </a>

Самое простое — добавить несколько TV, которые в шаблоне будут доступны не как $object.image, а как $object.tvs.img1, $object.tvs.img2 и т.д. или можно использовать MIGX

MIGX конечно же предпочтительней по ряду причин, в том числе и потому что не приходится 100500 ТВшек создавать. Вот я на одном проекте так докручивал галерею. В процессор получения товара дописал: public function afterIteration(array $list){ $list = parent::afterIteration($list);

    foreach($list as & $l){  
    
        switch($this->getProperty('image_url_schema')){
            case 'base':
                $images_base_url = $this->modx->runSnippet('getSourcePath');
                break;
            
            case 'full':
                $images_base_url = $this->modx->getOption('site_url');
                $images_base_url .= preg_replace("/^\//", "", $this->modx->runSnippet('getSourcePath'));
                break;
            
            default: $images_base_url = '';
        }      
        /*
            Картинки
        */
        $l['images'] = array();
        
        if(!empty($l['tvs']['images']['value'])){
            $images = json_decode($l['tvs']['images']['value'], true);
            foreach($images as $image){
                $image['image'] = $images_base_url.$image['image'];
                $l['images'][] = $image;
            }
        }
    }
    return $list;
} А в шаблоне уже оформление по своему вкусу. У меня это вот так: {if $object.images}
                {foreach $object.images as $img}
                    {snippet name="phpthumbof" params="input=`{$img.image}`&options=`w=65&h=65&q=90`" assign=thumb}
                    <a rel="useZoom: 'zoom1', smallImage: '{$thumb}'" title="" href="{$img.image}" class="cloud-zoom-gallery">
                        <img alt="" src="{$thumb}">
                    </a>
                {/foreach}

{/if}

а как быть с foreach($list as & $l){ $l['image'] = ''; if(!empty($l['tvs']['image']['value'])){ $l['image'] = $images_base_url . $l['tvs']['image']['value']; } else{ $l['imageDefault'] = $images_base_url . 'products/no_photo.png'; } }

а это уже дела вкуса. тут просто проверяется, задана ли картинка, и если нет — вставляется дефолтовое изображение. но это можно и в smarty сделать.

Если вы хотите дописать это (получение галереи товара) в исходный процессор получения товаров, то вы все это объединяете в одном цикле, то есть получится так: public function afterIteration(array $list){ $list = parent::afterIteration($list);

    switch($this->getProperty('image_url_schema')){
        case 'base':
            $images_base_url = $this->modx->runSnippet('getSourcePath');
            break;
            
        case 'full':
            $images_base_url = $this->modx->getOption('site_url');
            $images_base_url .= preg_replace("/^\//", "", $this->modx->runSnippet('getSourcePath'));
            break;
            
        default: $images_base_url = '';
    } 
    
    foreach($list as & $l){
        // Базовая картинка
        $l['image'] = '';
        if(!empty($l['tvs']['image']['value'])){
            $l['image'] = $images_base_url . $l['tvs']['image']['value'];
        }
        else{
            $l['imageDefault'] = $images_base_url . 'products/No-Photo.jpg';
        }
        
        /*
            Картинки
        */
        $l['images'] = array();
        
        if(!empty($l['tvs']['images']['value'])){
            $images = json_decode($l['tvs']['images']['value'], true);
            foreach($images as $image){
                $image['image'] = $images_base_url.$image['image'];
                $l['images'][] = $image;
            }
        }
    }
    return $list;
} А если вы расширяете процессор, то за это не паритесь, потому что там все равно вызывается родительский метод, так что картинка будет учтена и базовая. public function afterIteration(array $list){
    $list = parent::afterIteration($list); В общем, здесь конечно же хорошо бы ООП понимать.

Только начала изучать. ShopModxRev Решила так. Установила пакет gallery и в товаре прямо загружаю фото в текстовый редактор, сколько хочу. Мышкой их уменьшаю до нужного мне размера и на сайте они увеличивпются.

Очень интересно. Адрес странички можно узнать? Как выглядит код картинки, если отключить визуальный редактор?

Вы спрашиваете или хвастаетесь?

Саш, если просто вставить картинки в текстовом редакторе, они всплывать не будут. Это как минимум надо плагин DirectResize включать или типа того.

Вы спрашиваете или хвастаетесь? Этот нюанс я не углядел :)

Я так понял, что девушка задает один размер, а на сайте картинка отображается другого размера. Я сам вообще не пользуюсь визуальными редакторами, и картинки выводить в поле контента - это по-моему не совсем удобно. :)

Есть у меня наработка, включу ее в новую сборку ShopModxBox. Там загрузка картинок прям аджаксовая. Нажал кнопку, выбрал файл, он сразу загрузился и добавился в галерею документа. Отличная штука для наполнения большого каталога.

Примерно такой же метод как описала ylarus я и использовал http://shop-merlis.ru/catalog/platya/platya-naryadnyie/988-atlasnyij-zhakkard-izumrud.html с MIGX я так и не смог разобраться... Но все равно спасибо Николаю за сборку!!!

Достойный сайт получился!:) Так в итоге как именно ваш метод работает? DirectResize используете? P.S. Постараюсь в обозримом будущем накидать подробный мануал для создания галерей на базе Migx.

TinyMCE визуальный HTML редактор, фото закидываю в описание товара указывая размер, описание, и т.д утомительно но продуктивно...

Незадокументированные возможности ShopModxBox :) Дело в том, что в сборке установлен плагин DirectResize, который и дает в данном случае этот эффект. То есть перед тем, как MODX отдаст конечных HTML, срабатывает этот плагин, находит в коде картинки, для которых размеры указаны меньше, чем их реальный размер, и эти картинки заменяются на всплывашки. Кстати, в DirectResize входит три разных JS-скрипта, и вы можете попробовать в настройках плагина изменить используемый скрипт. http://joxi.ru/Zxz8U4wyTJDrAt9EGpo

А на нельзя задавать JS-скрипты в шаблонах? чтобы на одной страничке одни картинки через highslide обрабатывались, а другие через prettyphoto? Было бы очен удобно :)

Можно конечно поэкспериментировать на предмет того, чтобы устанавливать различные настройки через $modx->setOption(), но вряд ли сработает, так как в первую очередь учитываются настройки самого плагина, а значит без хардкода вообще никак :) Проще вручную прописать либы в шаблонах и все.

Я не хвастаюсь. Просто может кому нибудь пригодиться! Вот и все. Вот ссылка (сайт в процессе создания)http://iconist.ru/catalog/muzhskaya-odezhda/dzhinsyi/dzhinsyi-kingz-1294.html код к картинке не добавляю. Но если посмотреть исходный код страницы, к ссылки приписывается класс и oncluk, но в текст.редакторе ничего не меняется и кроме картинки ничего не добавляю. Для пользователя который раньше не наполнял сайт в текс.ред вполне удобно)). Есть недостаток, на андройде в браузере.

Я не хвастаюсь. Просто может кому нибудь пригодиться! Я вас не пытался обидеть, просто не было понятно спрашиваете вы про что-то или уже опытом делитесь. Как я и написал ниже, это "виноват" плагин DirectResize.