1,451

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

Напишите пожалуйста в поддержку.

1,452

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

Ну во первых в layout.tpl Вашей темы нужно добавить скрипт jquery.ajaxpagination.js

{addjs file="jquery.ajaxpagination.js"}

Потом убедиться что у Вас есть js файл в папке /templates/Ваша тема/resourse/js/jquery.ajaxpagination.js
Если нет, то переносим из /templates/.default/resourse/js/jquery.ajaxpagination.js

Теперь дело за инициализацией в шаблоне. Открываем list_products.tpl в Вашей теме.
Убираем строку с пагинацией.

{include file="%THEME%/paginator.tpl"}

Вместо неё создаёт кнопку "Показать ещё" с настройками:

{if $paginator->total_pages > $paginator->page}
        <div class="wrapper-space"></div>
        <div data-pagination-options='{ "appendElement":".products-list" , "clickOnScroll":true }' href="{$router->getUrl('catalog-front-listproducts', ['query'=>$query, 'category'=>$category.alias,'p' => $paginator->page+1])}" data-href="{$router->getUrl('catalog-front-listproducts', ['query'=>$query, 'category'=>$category.alias,'p' => $paginator->page+1])}" class="more onemoreEmpty margin-top ajaxPaginator">
            <div class="icon"></div>
            еще
        </div>
    {/if}

Ключевым здесь является класс ajaxPaginator. Т.к. именно по нему отрабатывает пагин.
У самой кнопки есть настройки 

 "appendElement":".products-list" , "clickOnScroll":true

где appendElement - это класс который будет заменять внутреннее содержимое подгруженной страницы. Т.к. возвращается вся страница, а заменена будет только 1 часть.  Например

<div class="products-list">
//Здесь элементы каталога товаров.

</div>
//А здесь пагинация кнопкой

clickOnScroll - использовать автопрокрутку или нет (true/false).

1,453

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

Попробуйте вместо:

<select class="yesno" name="pf[{$prop.id}]" data-start-value="">
        <option value="">{t} Не выбрано {/t}</option>
        <option value="1" {if $filters[$prop.id] == '1'}selected{/if}>{t}Есть{/t}</option>
        <option value="0" {if $filters[$prop.id] == '0'}selected{/if}>{t}Нет{/t}</option>
    </select>

Поставить:

<input type=['checkbox'] name="pf[{$prop.id}]" data-start-value="" value=1 {if $filters[$prop.id] == '1'}checked{/if}/>

1,454

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

Более подробно распишите, а лучше по таким вопросам в поддержку писать на support@readyscript.

1,455

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

Олег пишет:

Подскажите, планируется ли сделать подгрузку каталога товаров с помощью Lazy loading, то есть, когда каталог товаров размещается на одной странице, а при перемотке вниз автоматически подгружается контент из следующей страницы. Делается, видимо, это с помощью AJAX и используется на множестве современных сайтов, начиная от facebook и vk и заканчивая магазинами на shop-script. User Experience от этого сильно вырос бы, а  нагрузка на сервер снизилась.

Пока не планируется. Но это легко сделать у нас. Есть плагин ajaxPagination, который можно внедрить, например как здесь http://instrument-krasnodar.ru/catalog/ … nstrument/

Сам плагин лежит в теме по умолчанию /templates/.default/resourse/js/jquery.ajaxpagination.js
Если нужно могу технически подсказать как сделать. Там ничего сложного.

Владимир пишет:

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

Это я все про то же поле ввода.

Посетителю всё равно на точку и запятую. Он просто перемещает ползунок. Или Вам пришло гневное письмо от посетителя с требованием ввести запятую? smile
Просто из-за этой запятой, потом возникает куча проблем связанное с тем, что если вы заводите с запятой, то и везде дожна быть запятая, а где-то точка, если вы ввели точку. Ведь есть ещё отображение, реакция на ползунок, импорт экспорт. А если у Вас часть данных для ползунка и с запятой, а часть без? Т.е. везде в системе, нужно лишний раз проверять, а где там пользователь ввёл запятую, а где нет и конвертировать для машинного  счёта. Это порождает нестабильность. Скорее здесь если сильно нужно, то должна быть настройка, что либо понимаем запятую, либо понимаем точку. Слишком много лишних проблем появляется с запятой.

в мобильном клиенте Альфа-Банка сделали так, что без разницы, точка или запятая, работает в любом варианте.

Банк и интернет-магазин разные вещи их сравнивать нельзя. В банке цифру вы вводите один раз и навсегда. Он потому понимает запятую, потому, что дальше её нигде не использует и при нажатии далее сразу конвертирует в точку для машинного понимания.

Если установить значение, допустим до 6 дюйм, а потом это значение удалить (очистить поле), то результат подбора будет пустой. И окончание url страницы [to]= То есть до нуля. Это не правильно.


Т.е. получается, Вы в поле где нужно указать значение, стёрли цифру оставили его пустым, ничего не введя? И предлагаете, чтобы пустое поле понималось как максимальное значение?


P.S. Мы обсудим вопрос с запятой, но я прошу Вас, чтобы не осталось без внимания Вы можете на helpdesk.readyscript.ru оставить пожелание.

Данные не бывают из неоткуда

1,458

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

Спасибо, а в шаблон только встроен стик "новинка"? если да, то как можно сделать  новый?

Да. Так и есть:

    {foreach $products as $product}
        <li {$product->getDebugAttributes()} data-id="{$product.id}">
            {$main_image=$product->getMainImage()}
            <a href="{$product->getUrl()}" class="image">{if $product->inDir('new')}<i class="new"></i>{/if}<img src="{$main_image->getUrl(188,258)}" alt="{$main_image.title|default:"{$product.title}"}"/></a>
            <a href="{$product->getUrl()}" class="title">{$product.title}</a>
            <p class="price">{$product->getCost()} {$product->getCurrency()} 
                {$last_price=$product->getOldCost()}
                {if $last_price>0}<span class="last">{$last_price} {$product->getCurrency()}</span>{/if}</p>
        </li>                   
    {/foreach}

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

{foreach $product->getSpecDirs() as $spec_dir} {* Перебираем спец категории товара *}
    {if $spec_dir.image} {* Если есть фото *}
         <img src="{$spec_dir.__image->getLink()}"/>
         {* или для определённых размеров нужно обрезать *}
         <img src="{$spec_dir.__image->getUrl(50, 50, 'xy')}"/>
    {/if}
{/foreach}

Ой. Прошу прощения, точно. orm.init.users-user, что-то перепутал под конец дня smile

1,460

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

Вы в облаке настраиваете, просто добавив свой домен?

Да

В данном видеоролике рассматривается вопрос создания фильтров в админ панели для фильтрации выводящихся элементов.
Видео урок есть у нас в разделе видео уроков поддержки
и доступен здесь:
https://www.youtube.com/watch?v=1VExSZ4 … L4X2UTC6Aw

Ну тогда Вам надо вешаться на orm.init.shop-order и добавить там поле паспорта.
А в самих шаблонах address.tpl и profile.tpl Вашей темы добавить поле как и все остальные там выводятся.
Видео урок по добавлению полей есть у меня в видео уроках:
https://www.youtube.com/watch?v=KoF2IyG … mp;index=1

Там стоит проверка в самом шаблоне если элементов меньше 5, то выводится радио кнопками. Потому, что комплектаций может быть и 500 и радиокнопками они не будут смотреться. Это в файле product.tpl или product_offers.tpl, если у Вас последняя версия шаблонов.
И выглядит это так:

<div class="values">
                {if count($product.offers.items)>5}
                    {* Если комплектаций много, то отобразим их в виде списка *}
                    <select name="offer">
                        {foreach from=$product.offers.items key=key item=offer name=offers}
                        <option value="{$key}" {if $smarty.foreach.offers.first}checked{/if} {if $check_quantity}data-num="{$offer.num}"{/if} {if $catalog_config.use_offer_unit}data-unit="{$offer->getUnit()->stitle}"{/if} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getOldCost($key)}"}' data-images='{$offer->getPhotosJson()}' data-offer-id='{$offer.id}' data-sticks='{$offer->getStickJson()}'>{$offer.title}</option>
                        {/foreach}
                    </select>
                {else}
                    {* Если комплектаци мало, то отобразим их в виде радиокнопок *}
                    {foreach from=$product.offers.items key=key item=offer name=offers}
                        <div class="packageItem">
                            <input value="{$key}" type="radio" name="offer" {if $smarty.foreach.offers.first}checked{/if} id="offer_{$key}" {if $check_quantity}data-num="{$offer.num}"{/if} {if $catalog_config.use_offer_unit}data-unit="{$offer->getUnit()->stitle}"{/if} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getOldCost($key)}"}' data-images='{$offer->getPhotosJson()}' data-offer-id='{$offer.id}' data-sticks='{$offer->getStickJson()}'>
                            <label for="offer_{$key}">{$offer.title}</label>
                        </div>
                    {/foreach}
                {/if}
</div>

Соответственно Вам нужно выдрать из этого контекста тот код, который Вы хотите использовать.

Вам надо, чтобы и у него в профиле было обязательно?

В шаблоне с фильтрами (/templates/perfume/moduleview/catalog/blocks/sidefilters/filters.tpl) у фильтров, которые идут с ползулком всегда есть и физическое представление в виде друх полей ввода от и до. У оборачивающего контейнера стоит класс fromToLine
Наример:

<div class="filter typeInterval">
                <h4>{t}Цена{/t}:</h4>
                <table class="fullwidth fromToLine">
                    <tr>
                        <td>{t}от{/t}</td>
                        <td class="p50"><input type="text" class="textinp fromto" name="bfilter[cost][from]" value="{if !$catalog_config.price_like_slider}{$basefilters.cost.from}{else}{$basefilters.cost.from|default:$moneyArray.interval_from}{/if}" data-start-value="{if $catalog_config.price_like_slider}{$moneyArray.interval_from|intval}{/if}"></td>
                        <td>{t}до{/t}</td>
                        <td class="p50"><input type="text" class="textinp fromto" name="bfilter[cost][to]" value="{if !$catalog_config.price_like_slider}{$basefilters.cost.to}{else}{$basefilters.cost.to|default:$moneyArray.interval_to}{/if}" data-start-value="{if $catalog_config.price_like_slider}{$moneyArray.interval_to|intval}{/if}"></td>
                        <td>{$prop.unit}</td>
                    </tr>
                </table>
                {if $catalog_config.price_like_slider && ($moneyArray.interval_to>$moneyArray.interval_from)} {* Если нужно показать как слайдер*}
                    <input type="hidden" data-slider='{ "from":{$moneyArray.interval_from}, "to":{$moneyArray.interval_to}, "step": "{$moneyArray.step}", "round": {$moneyArray.round}, "dimension": " {$moneyArray.unit}", "heterogeneity": [{$moneyArray.heterogeneity}]  }' value="{$basefilters.cost.from|default:$moneyArray.interval_from};{$basefilters.cost.to|default:$moneyArray.interval_to}" class="pluginInput" data-closest=".fromToPrice" data-start-value="{$basefilters.cost.from|default:$moneyArray.interval_from};{$basefilters.cost.to|default:$moneyArray.interval_to}"/>
                {/if}
            </div>

В JS ниже в этом файле  прописано физическое скрытие этого котейнера по классу fromToLine. Поэтому если его убрать, а лучше просто заменить на fromto. То у Вас поля появятся. Правда в CSS надо будет подогнать контейнер, чтобы на него ползунок не налазил. Но я думаю Вы с этим разберётесь.

Спасибо!

1,468

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

Мы никогда не делаем полу решения. Если делать, то нужно, чтобы во всех категориях была сортировка. У нас уже как-то была такая реализация на заказ, но системные файлы, из-за этой фичи были раздуты до неимоверных размеров и сильно усложнили контроллеры и логику в JS админ панели. Поэтому мы не включили такую вещь в основу. Все вещи с продажами можно решить под другому. Простыми блоками. Сортировка по рейтингу тоже решает вопрос с подъёмом. У большинства крупных магазинов сортировка идёт именно по рейтингу e96, ulmart, dns. Другое дело, что человеку нужно просто визуально контролировать процесс. Я лично не воодушевлён идеей с ручной сортировкой. Обычно всё решается спец категориями.

Что Вы имеете ввиду под подбором товаров? Фильтр? Или SEO категорию?

1,470

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

Я разобрался, во-первых в соответствии с документацией хук должен быть такой.

$this
            ->bind('controller.exec.shop-admin-orderctrl.index');

Почему, читаем здесь:
https://readyscript.ru/dev-manual/dev_hooks.html
controller.exec.КОРОТКОЕ_ИМЯ_КОНТРОЛЛЕРА.ИМЯ_ДЕЙСТВИЯ

Соответственно функция:

public static function controllerExecShopAdminOrderctrlIndex($controller)
    {
       $controller->setHeaderHtml('<link type="text/css" href="/resource/css/common/mystyle.css" media="all" rel="stylesheet">');
    }
}

У меня всё прекрасно получилось.

1,471

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

Такое не только с баннером, не масштабируются изображения и встроенная карта яндекс в мобильной версии.

При вставке скрипта, который отображает у Вас карту, Яндекс принудительно прописывает ширину. Обычно там в этом коде есть строка &width=ширина.
Если его убрать, то будет на всю ширину блока не вылезая за неё.
Например вот у Вас:

<script type="text/javascript" charset="utf-8" async="" src="https://api-maps.yandex.ru/services/constructor/1.0/js/?sid=JXTBjmOICIps_v5JZvkImZmy1ltl051M&amp;width=876&height=695&lang=ru_RU&sourceType=constructor&scroll=true"></script>

1,472

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

Да. Нужно убрать CSS который отвечает за реакцию при уменьшении экрана. В файле layout.tpl в этой теме оформления(perfume) есть строки:

{addcss file="720.css?v={$css_version}"}
{addcss file="mobile.css?v={$css_version}"}

Попробуйте их убрать я думаю, всё получится.

Только не забудьте эту тему оформления отклонировать, если у Вас это не сделано, ато при обновлении файл перезатрётся.

Я не забыл. Я отвечу позже.

1,474

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

Доработать скорее всего возможно, но это очень существенная доработка, которая пока в основу не войдёт, и потому будет дорогостоящая. Вы можете обратиться в платную поддержку и оставить пожелание в сервисе пожеланий (helpdesk.readyscript.ru). Но лучше конечно по рейтингу Вам сделать, как более дешёвый вариант. На случай продаж есть блоки топ товаров и товары из спец категорий.

1,475

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

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