2,676

(2 ответов, оставленных в Вопросы по работе с системой)

А лучше на самом хостинге увеличьте)

2,677

(16 ответов, оставленных в Предложения по улучшению системы)

У Почти России, нет подходящего интерфейса для интеграции. По крайней мере мы не нашли.

Пока нет, но в плане ближайших обновлений такая возможность появится. Пока только удалением и заново созданием.

2,679

(3 ответов, оставленных в Вопросы по работе с системой)

Ну теги <style> это несколько другая тема. Мы я думаю разберёмся и выпустим обновление, но чуть позже. Пока можно назначить классы тегам и в style.css прописать значения.

2,680

(8 ответов, оставленных в Вопросы по работе с системой)

Ошиблись где-то в шаблоне, или что-то не закрыли.
Включите отображение ошибок как написано здесь.

2,681

(7 ответов, оставленных в Вопросы по работе с системой)

Включите отображение ошибок как написано здесь.
После этого посмотрите что за ошибку пишет.
Скорее всего у Вас не 5.3 php. Ну это впрочем как предположение.

От себя добавлю:
Характеристики в 1С -> комплектации в ReadyScript
Свойства в 1С -> характеристики в ReadyScript

Кстати вот код страницы товара нефертити

{addcss file="jquery.jqzoom.css"}
{addjs file="jquery.changeoffer.js"}
{addjs file="jquery.jqzoom-core.js"}
{addjs file="jquery.lightbox.min.js" basepath="common"}
{addcss file="common/jquery.lightbox.packed.css" basepath="common"}
{modulegetvars name="\Colors\Controller\BlockValues" var="colors"}
{assign var=properties value=$product->fillProperty()}

{if $product->isOffersUse()}
    {addjs file="product_offer.js"}
{/if}
    
    <div class="separator-line mb10 product-right-top-margin">
        <span class="menu_gradient pink"></span>
        <span class="title">{$product.title}</span>
    </div> 
    
    <div class="product productItem" data-id="{$product.id}">      
        <div class="photoblock">
            <div class="bigpicture">
                <a href="{$product->getMainImage(1000, 1111, 'xy')}" id="big_pic" rel="gallery"><img src="{$product->getMainImage(408, 450, 'xy')}">
                    <div class="zoom"></div>
                    {if $product->inDir('newest')}<div class="newest"></div>{/if}
                </a>
            </div>
            {assign var=images value=$product->getImages()}
            {if count($images)>1}
            <div class="pictures">   
                {foreach from=$images item=img}
                <a href="{$img->getUrl(1000, 1111, 'xy')}" rel="{ gallery: 'gallery', smallimage: '{$img->getUrl(347,382, 'xy')}', largeimage: '{$img->getUrl(1000, 1111, 'xy')}'}"><img src="{$img->getUrl(102,111, 'axy')}"></a>
                {/foreach}
            </div>
            {/if}
            <div style="display:none" id="gallery-list">
                {foreach from=$images item=img}
                    <a href="{$img->getUrl(800,881, 'xy')}" data-link="{$img->getUrl(1000, 1111, 'xy')}"></a>
                {/foreach}                
            </div>
        </div>        
        
        <div class="info">
            <div class="nomarg">
                {*<span class="title">{$product.title}</span><br>*}
                <span class="brand">{$product->getPropertyValueByTitle('Бренд')}</span><br>
            </div>
            <div class="title">
                {$product.title}
            </div>
            <div class="barcode">
                <b>Артикул:</b> {$product.barcode}
            </div>
            <div class="">
                <span class="rating">
                    <b>Рейтинг:</b> <div class="stars_na" title="Средняя оценка: {$product->getRatingBall()}">
                         <div style="width:{$product->getRatingPercent()}%"></div>
                    </div>
                </span>
                <a href="#feedback" class="feedback-link">Отзывы покупателей</a>
            </div>
            
            
            <div class="description">
                {$product.description}
            </div>
            
                                   
            <div class="colors propsContainer">
                    {if $product->isOffersUse()}
                            <div class="allHiddenOffers" data-info='{literal}{"offers":["Цвет","Размер"],"names":["color","size"]}{/literal}'>
                            {if count($product.offers.items)>0}
                             
                                {foreach from=$product.offers.items key=key item=offer name=offers}
                                    <input type="hidden" class="hidden_offers" data-id="{$key}" data-num="{$offer.num}" data-size="{$offer.propsdata['Размер']}" data-color="{$offer.propsdata['Цвет']}" data-title="{$offer.title}"  data-change-cost='{ ".price .value": "{$product->getCost(null, $key)}", ".price .before-value": "{$product->getCost('Старая цена', $key)}"}'/>
                                {/foreach}                                      
                                                     
                            {/if}
                            </div>
                    {/if}
                
                    <input type="hidden" name="offer" value="0"/>
                    {foreach from=$properties item=data}
                        {foreach from=$data.properties item=property}
                    
                            {if !empty($property.value)}
                                {assign var=has_properties value=true}                        
                                {if !in_array($property.title, ['Бренд'])}
                                    <div class="props">
                                    {if $property.title == 'Цвет'}
                                        {if $product->isOffersUse()}
                                            <div class="color-select">
                                                <span class="key">ЦВЕТ:</span>
                                                <ul class="color-box">
                                                    {foreach from=$property.value key=key item=value}
                                                    <li>
                                                        <div class="box{if $value=='Разноцвет'} multicolor{/if} offer_cell" style="background-color:{$colors.colors[$value].color}" data-id="{$property.id}" data-value="{$value}" data-name="color" data-type="Цвет" title="{$value}"><i></i></div>
                                                    </li>
                                                    {/foreach}
                                                </ul>   
                                            </div>                     
                                        {/if}    
                                    {else}
                                        <div class="product_properties">
                                            <span class="key">{if $property.title=='Размер'}{if $product->isOffersUse()}РАЗМЕР:{/if}{else}{$property.title}:{/if}</span> {if $property.title!=='Размер'}{$property->textView()}{/if}
                                            {if $property.title=='Размер'}
                                                <span class="open_sizes">
                                                    <a href="/Tablica-razmerov/?ajax=1" class="inDialog">Определить свой размер</a>
                                                </span>
                                            {/if}
                                        </div>
                                        {if $property.title=='Размер'}
                                            {if $product->isOffersUse()}
                                                {static_call var=sizes callback=['NefertitiCustom\Model\Api','getSizesFromString'] params=[$property->textView()]}
                                               
                                                {if !empty($sizes)}
                                                    <ul class="sizes-box">
                                                        {foreach from=$sizes item=size}
                                                            {assign var=size value=trim($size)}
                                                            <li><a href="#size{$size}" class="offer_cell" data-id="{$property.id}"  data-value="{$size}" data-name="size" data-type="Размер">{$size}</a></li>
                                                        {/foreach}
                                                    </ul>
                                                {/if}
                                            {/if}
                                        {/if}
                                    {/if}
                                    </div>
                                {/if}
                            {/if}
                        {/foreach}
                    {/foreach}
            </div>
            
            
            <div class="bold-border " style="margin-top:0"></div>
            <div class="priceWrap">
                <div class="price">
                    {if $product->getCost('Старая цена')>0}
                        <span class="before-value">{$product->getCost('Старая цена')}</span> <span class="before-currency">{$product->getCurrency()}</span>
                    {/if}
                    <span class="value">{$product->getCost()}</span> <span class="currency">{$product->getCurrency()}</span>
                </div>
            </div>
            {if $product.num && $product->isOffersUse()}
                <div class="addToCartContainer" data-cart-url="{$router->getUrl('shop-front-cartpage')}">
                    <a href="{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}" class="buyButton addToCart noShowCart" data-product-page="1">В корзину</a>
                </div>
            {else}
                <p>Нет в наличии</p>
            {/if}
        </div>
    </div> <!-- .product -->
    
    <a name="feedback"></a>
    {* Комментарии *}
    {moduleinsert name="\Comments\Controller\Block\Comments" type="Catalog\Model\CommentType\Product"}
    
    {* Последние просмотренные товары *}
    {moduleinsert name="\Catalog\Controller\Block\LastViewed" pageSize="3"}
    
    {assign var=recomended value=$product->getRecommended()}
    {if count($recomended)}    
    <div class="separator bm20">
        <span class="title">С ЭТИМ ТОВАРОМ ОБЫЧНО ПОКУПАЮТ</span>
    </div>
    
    <div class="products">
        {foreach from=$recomended item=item}
            {$item->fillProperty()}
            {include file="%catalog%/one_product.tpl" product=$item}
        {/foreach}
    </div>
    {/if}
    {literal}        
    <script type="text/javascript">
        
        $(window).load(function() {
            $('#big_pic').jqzoom({
                preloadText: 'Загрузка...',
                title: false,
                zoomWidth:322,
                zoomHeight:382,
                xOffset:10
            });                                    
            
            $('#gallery-list a').lightBox({
                imageLoading:            '/resource/img/lightbox/loading.gif',
                imageBtnPrev:            '/resource/img/lightbox/prev.gif',   
                imageBtnNext:            '/resource/img/lightbox/next.gif',   
                imageBtnClose:           '/resource/img/lightbox/close.gif', 
                imageBlank:              '/resource/img/lightbox/blank.gif',                    
            });
            
            $('#big_pic').click(function() {
                var link = $(this).attr('href');
                $('#gallery-list a[data-link="'+link+'"]').click();
            });
            
            $('#big_pic').bind('mouseenter', function() {
                $('.zoom').hide();
            });
            $('#big_pic').bind('mouseleave', function() {
                $('.zoom').show();
            });                                    
        });
    {/literal}
       {if $product->isOffersUse()} 
        {literal}
            $(function() {
                $('.propsContainer').propSelector();
            });
        {/literal}
       {/if}
    {literal}  
        </script> 
    {/literal}   

Собственно остаётся настроить под себя.

Стоимость примерно 3000 руб. под вашу тему.

Я описывал подобное, вот здесь. Скрипт отвечающий за выборку при желании можно выкачать с сайта нефертити.

2,686

(8 ответов, оставленных в Вопросы по созданию тем оформления)

Конструктор то в верном порядке будет подгружать блоки, просто из-за float будет всё в другую сторону.

2,687

(8 ответов, оставленных в Вопросы по созданию тем оформления)

Всё у Вас верно отображается. Просто тема свёрстана (Указан float в css) так адаптивная, что колонка с брендами будет только слева. Надо править вёрстку, если Вы хотите именно такой вариант.

2,688

(1 ответов, оставленных в Вопросы по работе с системой)

В настройках модуля обмен данными, на вкладке Каталог есть такая галочка "Не удалять характеристики созданные на сайте". Пользуйтесь!

Реально, мы как раз сталкивались с такой проблемой.
Тот вариант который вы хотите называется многомерные комплектации.

Вот описание многомерных комплектаций и как их сделать.

Судя из рисунка первого вы заполнили характеристики, а Вам надо ещё заполнить свойства товара в 1С на вкладке свойства. Для того чтобы одному товару задать несколько значений свойства, нами был придуман способ указания значений через разделитель. Только для того, чтобы ReadyScript понял, что такое будет использоваться, нужно указать какой будет разделитель. Вот описание как это сделать - Выгрузка множественных значений.

После того как заполним и сделаем выгрузку, у нас появятся характеристики у товара на сайте. Необходимо будет просто у этого товара, или у группы включить отображение многомерных комплектаций. Как указано в первом руководстве которое, я дал.
Удачи!

Да у меня есть свойство "публичный". Снимите с него галку и сохраните. Сбросьте кэш, должно получится.

Если нужно переключится между темами, то в админке Веб-сайт -> Настройка сайта. Поле шаблон. Нажимаем кнопку выбрать.
С собственно выбираем тему и цвет.
Сохраняем.
А если нужна своя тема оформления, то смотрим сюда - Как создать тему оформления для ReadyScript.

Ну вообще здесь рассказано как сделать свой модуль с примером.
А также есть Руководство для разработчика.

Также привожу пример того как сделать модуль который добавляет доп. поле к товару например.
Вот пример рабочего кода

Нужно дописать модуль, который будет подписываться на хуки системы.
Вот как надо:

1. В папке  modules делаем папку с названием модуля. Например custom
2. В ней создаём папку config
3. В папке config создаём файл file.inc.php с содержимым:

<?php
namespace Custom\Config;

class File extends \RS\Orm\ConfigObject
{
    /**
    * Возвращает значения свойств по-умолчанию
    * 
    * @return array
    */
    public static function getDefaultValues()
    {
        return array(
            //Default - значения
            'name' => t('Собственный модуль'),
            'description' => t('Позволяет расширять функционал сайта'),
            'version' => '1.0.0.0',
            'author' => 'Alexander Zakusilo'
        );
    }      
}


Сохраняем.
4. В папке config создаём файл handlers.inc.php с содержимым:

<?php
namespace Custom\Config;

class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this->bind('orm.init.catalog-product'); //Хук на инициализацию объекта товара.
    }
    
    
    /**
    * Функция подвешивается на инициализацию товара
    * 
    */
    public static function ormInitCatalogProduct(\Catalog\Model\Orm\Product $product)
    {
        $product->getPropertyIterator()->append(array(
            t('Основные'),
           'new_image' => new Type\Image(array(
                        'maxLength' => '255', //Длинна поля
                        'max_file_size' => 10000000, //Максимальный размер загружаемой картинки
                        'allow_file_types' => array('image/pjpeg', 'image/jpeg', 'image/png', 'image/gif'), //Поддерживаемые типы
                        'description' => 'Новая картинка', //Название поля
            )),
        ));
        return $product;
    }
}

Сохраняем.
6.Собственно далее идём в Веб-сайт -> Настройка модулей. Сбрасываем кэш. Должен появится наш модуль. После чего устанавливаем его.
7. Идём Управление -> Настройки системы. Справа ищем "Исправить структуру БД". Нажимаем ждём результат.
Всё. Теперь у товара появится поле с добавлением картинки. Тоже самое действие для всех ORM объектов.

P.S.
Ну и напоследок как же к нему обратится?
В обычном случае в шаблонах это выглядит так

{$product.new_picture}

т.е. $product.алиас поля добавленного
Но в нашем случае используется изображение, поэтому для отображения существует функция:

{$product->__new_picture->getUrl(700, 304, 'xy')} 

{$product->__new_picture->getUrl(ширина, высота, 'метод обрезки')}

Подробнее о системе изображений здесь

Включить можно так Включить отображение ошибок.

Ну а если в двух словах. В корне сайта лежит .htaccess
В нём меняем строку

php_flag display_errors off

на

php_flag display_errors on

Далее идём в админку. Управление -> Настройки системы.
Ставим галку на:

- Всегда проверять шаблоны на предмет модификации
- Подробно отображать информацию об исключениях

Снимаем галку с:
- Включить кэширование данных
- Включить кэширование Smarty

Всё

Добрый день.
Вообщем как-то при продаже маек потребовалось сделать модуль, который выводил бы для фильтров разные в графическом виде. Да так чтобы можно было мышкой ткнуть и выбрался цвет и соответственно применялся фильтр.
Вот решение.
1. Качаем модуль цветов здесь.
2. Закидываем содержимое в папку modules
3. Устанавливаем модуль в админке Веб-сайт -> Настройка модулей. (Ищем Справочник цветов). Ссылка не установлен будет красным цветом
4. После установки обновляем кэш.
5. В меню появится "Цвета" в меню "Магазин".

Алгоритм добавления такой:
1. Создаём характеристику цвет в "Товары"->"Характеристики"
2. Заполняем значения характеристики и  сохраняем. Например Красный Синий и т.д.
3. Идём к редактированию товара и выставляем у него значение характеристики цвет.
4. После заполнения значениями характеристики цвет товаров, идём в "Магазин" -> "Цвета". Нажимаем добавить цвет.
5. Указываем название точно равное Варианту цвета. Например "Красный" и собсвенно указываем красный цвет ему. И т.д. Создав палитру.

Работа с шаблонами:
Теперь необходимо вывести наше решение в фильтрах.
Для этого копируем шаблон из
/modules/catalog/view/blocks/sidefilters/filters.tpl
в

/templates/Ваша тема/moduleview/catalog/blocks/sidefilters/

И меняем его примерно так:

{addjs file="history.min.js" basepath="common"}
{addjs file="{$mod_js}jquery.filter.js" basepath="root"}
{*Подгружаем цвета*}
{modulegetvars name="\Colors\Controller\BlockValues" var="colors"}
{*Подгружаем цвета*}
<form method="GET" class="filters" action="{urlmake f=null bfilter=null p=null}">
    <div class="side-left">
        <div class="overlay"></div>
        <div class="properties" data-base-url="{urlmake f=null p=null}">
        {foreach from=$prop_list item=item}
            {foreach from=$item.properties item=prop}
                {if $prop.title == 'Цвет'}
                    <div class="block block-colors" data-filter-id="{$prop.id}">
                        <div class="separator-text">ЦВЕТ</div>
                        <div class="separator">&nbsp;</div>
                        <ul>
                            {foreach from=$prop->getAllowedValues() key=key item=value}
                                <li {if isset($filters[$prop.id]) && in_array($value, $filters[$prop.id])}class="checked"{/if} data-filter-value="{$value}">
                                    <div class="selected"></div>                            
                                    <a href="?f[{$prop.id}][]={$value}" class="filter color{if $value=='Разноцвет'} multicolor{/if}" style="background-color:{$colors.colors[$value].color}" title="{$value}"></a>
                                    <input type="checkbox" {if is_array($filters[$prop.id]) && in_array($value, $filters[$prop.id])}checked{/if} name="f[{$prop.id}][]" value="{$value}" style="display:none;"/>
                                </li>
                            {/foreach}
                        </ul>
                    </div>
                {else}
                    <div class="block block-select" data-filter-id="{$prop.id}">
                        <div class="separator-text">{$prop.title}</div>
                        <div class="separator">&nbsp;</div>
                        <ul>
                            {assign var=prop_values value=$prop->getAllowedValues()}
                            {if $prop.title=='Скидка %' && $prop_values}
                                {php}unset($prop_values[0]);{/php}
                            {/if}
                            {foreach from=$prop_values key=key item=value name=i}
                                {if !($prop.title=='Скидка %' && $value==0)}
                                    <li {if isset($filters[$prop.id]) && in_array($value, $filters[$prop.id])}class="checked"{/if} data-filter-value="{$value}">
                                        <a class="filter checkbox" href="?f[{$prop.id}][]={$value}">{$value}</a>
                                        <input type="checkbox" {if is_array($filters[$prop.id]) && in_array($value, $filters[$prop.id])}checked{/if} name="f[{$prop.id}][]" value="{$value}" style="display:none;"/>
                                    </li>
                                {/if}
                            {/foreach}
                        </ul>
                    </div>            
                {/if}
            {/foreach}
        {/foreach}  
        <input type="submit" value="Применить" class="onemore submitFilter" style="display:none;">
        </div>
    </div>
</form>

<script>
$(function() {
    
    $(function() {
        $('.side-left').productFilter({
            targetList : '.updatable' //Div в который будет обновлён
        });
    });
    
    $(window).bind('new-content', function() {
        $('.side-left .overlay').hide();
    });    
    
    $('.filter').on('click',function() {
        var wrap = $(this).closest('li');
        $(wrap).toggleClass('checked');
        if ($(wrap).hasClass('checked')){
           $('input',wrap).prop('checked',true).change();  
        }else{
           $('input',wrap).prop('checked',false).change();  
        }
        
        return false;
    });
});
</script>

Сохраняем.
Теперь поправим CSS добавив стили нашим цветам. Например добавив в style.css

.block-colors ul .selected {
    border: 2px solid #dd0080;
    bottom: -2px;
    display: none;
    left: -4px;
    position: absolute;
    right: -2px;
    top: -4px;
}
.block-colors ul .checked .selected {
    display: block;
}

.block-colors ul {
    list-style: none outside none;
    margin: 0 18px;
    overflow: hidden;
    padding: 0;
}
.block-colors ul li {
    background: none repeat scroll 0 0 #ececec;
    float: left;
    height: 24px;
    margin: 5px;
    position: relative;
    width: 24px;
}
.block-colors ul .selected {
    border: 2px solid #dd0080;
    bottom: -2px;
    display: none;
    left: -4px;
    position: absolute;
    right: -2px;
    top: -4px;
}
.block-colors ul .checked .selected {
    display: block;
}
.block-colors ul li a {
    box-shadow: 0 0 3px silver;
    left: -1px;
    position: relative;
    top: -1px;
}

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

/modules/main/view/blocks/logo/foot_logo.tpl

в папку /templates/ваша тема/moduleview/main/blocks/logo/

После чего открываем этот файл и редактируем.

Всё предельно просто. Вам необходимо поправить шаблон, добавив в него строку со ссылкой.
Для начала ознакомьтесь со статьёй которая разъясняет, как нужно создавать свои шаблоны Создние шаблона.

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

сам шаблон с темой лежит в /templates/ и называется default
Скопируйте скопируйте эту папку и переименуйте. Ну например в default2. Внутри также лежит файл .xml с названием темы оформления. Откройте его и тоже переименуйте в нём название темы.
Далее заходим в админ. панель.:

Веб-сайт -> настройки сайта

Выбираем вновь созданный шаблон и сохраняем его.
Всё, теперь можно работать с шаблоном, не опасаясь, что его подменят во время обновления сайта.
Сам шаблон находится в папке:

корень сайта/modules/catalog/view/blocks/topproducts/top_products.tpl

Его мы копируем в папку:

корень сайта/templates/название нового шаблона/moduleview/catalog/blocks/topproducts/

Далее открываем этот файл:
После строки

{foreach from=$products item=product}

Можно добавить следующую строку:

<a href="{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}" class="cartButton addToCart noShowCart" title="В корзину">&nbsp;</a>

Если Вам необходимо, чтобы был полный спектр всех учтённых условий, то в начале файла добавляем:

{assign var=shop_config value=ConfigLoader::byModule('shop')}
{assign var=check_quantity value=$shop_config->check_quantity}

А после перебора товаров:

{if $shop_config}
      {if $product->shouldReserve()}
          <a href="{$router->getUrl('shop-front-reservation', ["product_id" => $product.id])}" class="cartButton inDialog reserv" title="Заказать">&nbsp;</a>
      {else}        
           {if $check_quantity && $product.num<1}
                 <span class="cartButton unobt" title="Нет в наличии">&nbsp;</span>
           {else}
                 <span data-href="{$router->getUrl('shop-front-multioffers', ["product_id" => $product.id])}" class="cartButton showComplekt inDialog" title="В корзину">&nbsp;</span>
                  <a href="{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}" class="cartButton addToCart noShowCart" title="В корзину">&nbsp;</a>
            {/if}
       {/if}
{/if}

Также не забывайте сбрасывать, или отключать кэш Readyscript