2,426

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

01. В настройках качества картинок если указать параметр - 100, то вес изображении увеличивается в три раза. Если этот параметр выставить - 90, то изображения весят столько же, но их качество заметно ухудшается.
--- Мы изменили качество по умолчанию при сжатии на 95, чтобы уменьшить размер файла. Если вы хотите более лучшее качество, то и файл будет больше. Это JPG.


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

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

Я имея свой собственный магазин, начитавшись трудов товарища Мациевского тоже переживал. А потом посмотрел на выдачу и понял, что всё в порядке, т.к. это настолько незначительное преимущество, что вручную пережимать каждое изображение из 1500 товаров для 3-х разрешений, то ну его в баню, особенно учитывая современный интернет. Конечно сидя в глухой деревне для моих родителей отдача сайта Quelle будет несколько дольше, но поверьте им на это плевать, т.к. даже почта на 56 килобитах в секунду открывается очень долго.

02. Название автоматически преобразовывается в чпу, при этом страница доступна и по айди - дублирование страниц. Таким образом, бывает по случайности забываешь удалять сгенерированное чпу, а в настройках нет возможности указать параметр - "только айди".
--- На живом сайте если нет ссылок на ваши дубли, то поисковик о них никак не узнает. Это я знаю на личном примере. Другое дело если вы ими засветили в своё время и не прописали алиасы и у Вас он месяц висел так. Я такого себе не позволяю, т.к. сразу статаюсь всё сделать как и положено. Но бывает и такое, что люди не не знали и не догадались. У яндекса и у гугла есть специальные страницы на которых Вы можете убрать данные страницы из поиска и для уверенности внести их в запрещение в robots.txt или прописать редиректы в htaccess.
Робот по своей природе тупой и врядли он знает о скрытой возможности открыть потаённую страницу дубль, если Вы её не засветили где-то. Если засветили исправляйте.
Мы в новых версия предусматрим возможность 301 редиректа для таких страниц, но за 5 лет это никому не мешало.

03. У блога генерируются дубли, например /text-4/, а по таким адресам /text-0/ - нет 404 ошибки.
--- Смотрим предыдущий пункт

04. На странице комментариев нет возможности открыть страницы где был опубликован комментарии.
--- Напишите подробное пожелание в helpdesk.readyscript.ru

05. Нельзя удалить страницу "бренды".
--- Бренды, это один из существующих всегда маршрутов. Не светите её.

06. "Покупки в 1 клик" список отображается с начала самых первых заказов.
--- Напишите подробное пожелание в helpdesk.readyscript.ru

07. Меняется название файла изображений на что-то типа l9ql2qr2gmcmix3_b772a2d8.jpg. Нет тега title.
--- Согласен title не хватает. Имя изображения пока менять не будем.

Всё в файле style.css в вашей теме оформления. /templates/fashion/resourse/css/style.css. Далее находим строку:

.breadcrumbs a

И просто изменяем содержимое.

Однако я рекомендую Вам ознакомится со статьёй по шаблоны чтобы всё понимать.

Для того, чтобы в теме после обновления ничего не поменялось отклонируйте тему оформления.

Напишите пожалуйста об этом в support@readyscript.ru

2,429

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

Напишите пожелание на сайте в helpdesk.readyscript.ru, я думаю реализуем.

Да мы видели пожелание. За выбор комплектации отвечает скрипт js. А именно jquery.changeoffer.js. В котором выбирается первоначально первая комплектация. Вам надо в нём разобраться и поменять, так чтобы у Вас выбиралась первая комплектация с не нулевым количеством. Используйте console.log().

2,431

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

Здравствуйте.
Большинство Ваших вопросов связано с редактированием шаблонов, поэтому Вам надо означкомится и попробовать нашу статью про, то как править и создавать свои шаблоны. Вот ссылка на документацию.
А также рекомендую посмотреть документацию для пользователей и разработчиков.

1. Как вставить логотип сайта?
- Заменить логотип Вы можете в админке в разделе Веб-сайт->Настройка сайта->Вкладка Организация.

3. Как сделать кнопки со ссылкой на текст (на доставку и оплату) наверху страницы? Где писать этот текст?
- Уточните задачу пожалуйста, т.к. она не однозначна. Но в общем итоге, нужно в нужном Вам месте, просто прописать ссылку.

4. Внизу страницы мелким шрифтом: как изменить контакты и прочее? Как там сделать свои ссылки?
- Контакты и прочие пункты меню выводятся из Веб-сайт->Меню. Вы там эти пункты можете редактировать. Если Вам нужно изменить выводящиеся пункты или корень этих пунктов, то в публичной части перейдите в режим правки (Переключатель когда вы под админом слева вверху) и затем наведитесь на блок который Вам нужно. Появится кнопка редактирования. Далее я думаю разберётесь. Если нет, то пишите.

5. Как убрать или чем-то заменить кнопку «все новости»?
- редактированием шаблона. Всё зависит от выбранной Вами темой оформления. Ознакомьтесь со стаьёй про темы офорления.

6. Как поставить сменяющуюся большую картинку вместо мальчика 50% ?  Размеры этой фотографии какие должны быть?
- Все баннеры которые выводятся в блоке баннеров находятся в админке в разделе Разное->Баннеры. Соответственно там Вы можете поменять картинку. Баннеры распределены на зоны(категории в этом разделе справа). У этих зон указан размер до которого будет образаться картинка. Вы грузите оригинал, а изображение подгоняется под размер указанный у зоны.

7. Как убрать «купон на скидку»?
- Редактированием шаблона выводящего корзину. Местоположение зависит от темы которую Вы используете. Смотрим статью про редактирование шаблонов.

Попробуйте изучить статью и немного разобраться. Ели не получится, что-то то пишите.

У вас в списке заказов перебираются эти заказы, а значит работать надо с ORM объектом заказа, а именно с классом
\Shop\Model\Orm\Order, который находится в /modules/shop/model/orm/order.inc.php.
Т.е. нам доступны все функции и поля данного класса.

Для проверки оплачен заказ или нет, служит поле "is_payed". Там всего два значения 0 и 1. Поэтому мы можем легко проверить оплачен ли заказ.

{if $order.is_payed} //Если заказ оплачен

{else} //Иначе

{/if}

Пробуйте

Не за что

Вы взяли весь кусок, но забыли о проверках:

{if $order->getPayment()->hasDocs()} //Проверяет наличие прикреплённых к заказу документов
  
{/if}

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

Т.е. забыли:

//Строка присваивает переменной объект класса типа оплаты
{assign var=type_object value=$order->getPayment()->getTypeObject()}

Поэтому ругалось, что типа переменная не объект, а просто null (Посмотреть можно с помощью {var_dump($type_object)}).

Полный код будет выглядеть так:

{if $order->getPayment()->hasDocs()} //Проверяем, есть ли прикреплённые документы у заказа. В нашем случае это ПД-4
     {assign var=type_object value=$order->getPayment()->getTypeObject()} //Подгружам объект типа оплаты (ПД-4 в нашем случае или другой тип оплаты, в зависимости от того что выбрал пользователь)
     {foreach $type_object->getDocsName() as $key=>$doc} //Получаем с помощью метода ->getDocsName() документы  и перебираем массив
        <pre>
        {var_dump($doc)}
        </pre>
        {if $doc.title!="квитанция"}
            <a href="{$type_object->getDocUrl($key)}" target="_blank">{$doc.title}</a><br>
        {else}
            Сюда вставляем свой код
        {/if}
     {/foreach}   
{/if}

Ввел Вас немного в заблуждением отсутствием в коде данных строк.

Если хотите лучше разбираться в синтаксисе Smarty, то вот документация

2,435

(4 ответов, оставленных в Сторонние модули, темы оформления для ReadyScript)

Неплохо)

Александр пишет:

    У Вас включено отображение ошибок уберите его и будет 404. И второе, а как собственно он у Вас оказался в корзине если вы его удалили?

Товар был занесен в корзину покупателем, потом в 1С товар был удален. Такая ситуация не редкая. Показывать 404, в данном случае, не правильно. Нужно как-то сообщить покупателю, что заказанный товар больше не поставляется.

1Ска никаких данных о том удалён товар или нет не присылает, по крайней мере в последних версиях формата я такого не видел, в начальных бывало.  Ваш вариант, это сделать так, чтобы товар в выгрузку у Вас не попадал. Задав нужные значения фильтра в 1С. У Вас есть настройки обмена данными (Веб-сайт->Настройка модулей->Обмен данными->Вкладка каталог товаров). Здесь Вы можете настроить, что делать с товарами не присутствующими в выгрузке. И поставить либо удалить, либо скрыть такие товары. Если произвести полную выгрузку(именно полную), то такие товары у Вас либо удаляться, либо в публичной части будут не видны.

У Вас включено отображение ошибок уберите его и будет 404. И второе, а как собственно он у Вас оказался в корзине если вы его удалили?

Да, всё по аналогии.

Всё просто. Судя по всему у Вас молодёжная тема оформления и это шаблон со списком заказов. Если да, то тогда смотрим в файл:

/templates/fashion ну или Ваша тема/moduleview/shop/myorders.tpl

Ищем в коде строку:

{if $order->getPayment()->hasDocs()}
     {assign var=type_object value=$order->getPayment()->getTypeObject()}
     {foreach $type_object->getDocsName() as $key=>$doc}
     <a href="{$type_object->getDocUrl($key)}" target="_blank">{$doc.title}</a><br>
     {/foreach}            
{/if}

Здесь перебираются документы, которые служат для вывода на печать.

Поэтому ставим проверку на имя документа и вставляем свой код:

{foreach $type_object->getDocsName() as $key=>$doc}
     <pre>
      {var_dump($doc)}
     </pre>
     {if $doc.title!="квитанция"}
     <a href="{$type_object->getDocUrl($key)}" target="_blank">{$doc.title}</a><br>
     {else}
          Сюда вставляем свой код
     {/if}
{/foreach}    

Можно, это же простой шаблон, но вопрос в другом. А вы как PDF документ делать будете? Сами сканировать?

Получилось?

Скорее всего Вам подойдёт вызов метода static_call. С ним можно ознакомится в документации.
Он позволит Вам вызвать свою функцию(public static) из своего класса и вернуть результат.

Например у нас есть  класс CustomApiв вашем модуле /modules/custom/model/customapi.inc.php. В нём Вы запишите свой метод, который вернёт все объекты заказов принадлежащих пользователю:

namespace Custom\Model;

class CustomApi {
    
    public static function getMyOrders(){
        $list = array();
        //Смотрим, а авторизованы ли мы, чтобы получить текущего пользователя
        if (\RS\Application\Auth::isAuthorize()){
           //Получим ORM объект текущего пользователя
            $user = \RS\Application\Auth::getCurrentUser();
            
            //Далее делаем запрос к БД, чтобы получить заказы пользователя
            $list = \RS\Orm\Request::make()
                    ->from(new \Shop\Model\Orm\Order()) //Обращение к таблице заказа через объект заказа
                    ->where(array( //Условие
                        'user_id' => $user['id'], //id пользователя
                    ))
                    ->where('status < 4') //Нужные нам статусы заказа < 4, т.к. статусы заказов должны быть менее выполнен и закрыт (4). Посмотреть статусы можно в Магазин -> Статусы заказов
                    ->objects(); //Выполнить запрос и получить в виде объектов заказы
        }
        return $list; 
        
    }
}

А в шаблоне просто делаем следующий вызов:

{static_call var=list callback=['\Custom\Model\CustomApi','getMyOrders']}
<pre>
{var_dump($list)}
</pre>

Пробуйте

2,443

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

Исправим, напишите пожалуйтса в support@readyscript.ru

2,444

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

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

/shop/model/printform/

И если заглянуть в один из классов, то в строке с функцией getTemplate() можно увидеть путь к шаблону, который и формирует документы. Например рассмотрим deliverynote.inc.php:

function getTemplate()
    {
        return '%shop%/printform/deliverynote.tpl';
    }

Если взглянуть на документацию по шаблонам, то эта запись означает, что шаблон будет искаться в папке модуля shop:

/modules/shop/view/printform/deliverynote.tpl

, либо смотрит есть ли шаблон с тем же названием здесь:

/templates/ВАША ТЕМА/moduleview/shop/printform/deliverynote.tpl

то тогда применяет его.

Значит, если мы хотим придать свою форму, то тупо копируем шаблон:

/modules/shop/view/printform/deliverynote.tpl

в

/templates/ВАША ТЕМА/moduleview/shop/printform/deliverynote.tpl

И тогда можем писать в него всё, что угодно.

Пробуйте!

2,445

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

Спасибо!
Исправил. Выйдет в ближайшем обновлении исправление.
Дело вот в чём:
Данная ошибка происходит потому что, событие openInDialog (открытие в диалоговом окне страницы с помощью класса inDialog) срабатывает только на тег <a>. А в многомерных комплектациях эта кнопка представлена в виде тега <span>
Чтобы переназначить назначение события на открытие в диалоговом окне нужно вызывать событие 'new-content'. В обновлении в файле

/modules/catalog/view/js/jquery.filter.js должно вызываться это событие с помощью

.trigger('new-content');

Те кто модифицировал тему самостоятельно или не хочет ждать или клонировал тему нужно сделать следующее:
в файле

/templates/ВАША ТЕМА/resource/js/theme.js

почти в самом конце нужно заменить:

$('a.inDialog', e.target).openInDialog();

на

$('.inDialog', e.target).openInDialog();

Это нужно сделать обязательно для собственных тем оформления.

Также для тех, кому нужно срочно чтобы всё работало не дожидаясь обновления, то идём в

/modules/catalog/view/js/jquery.filter.js

и меняем строку:

$(data.options.targetList).html(response.html);

на

$(data.options.targetList).html(response.html).trigger('new-content');

Пробуйте

2,446

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

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

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

А посмотреть какой итоговый запрос у Вас получается можно так:

var_dump(\RS\Orm\Request::make()
    ->from(new Orm\Product, 'A')
    ->join(new Orm\Second, 'A.id = B.product_id', 'B')
    ->where('A.num > 0')
    ->toSql());

или ещё проще:

echo \RS\Orm\Request::make()
    ->from(new Orm\Product, 'A')
    ->join(new Orm\Second, 'A.id = B.product_id', 'B')
    ->where('A.num > 0');

А вообще лучше всего пользоваться современными редакторами для подсветки подсказок. Я например использую phpED 9. И тогда можно будет получить подсказки с описанием методов легко.

2,448

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

Можно будет, я думаю. Напишите пожелание, а там после выхода маркетплэйса, может и сделаем.

2,449

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

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

Когда выделите нажимайте справа внизу редактировать. И потом в появившемся окне поставьте галочку напротив поля "Показывать товар".
После чего нажимаем сохранить.

В общем, алгоритм такой:
1. Смотрим статью про создание тем оформления и разбираемся.
2. Клонируем тему fashion и переделываем название и файл theme.xml под себя. (Если не сделать так, при следующем обновлении правки затрутся)
3. Переключаемся на новую тему.
4. Файл шаблона вывода списка товаров в категории находится в
/templates/ВАША ТЕМА/moduleview/catalog/product_list.tpl
5. Переносим строки с {$category.description} куда нам нужно.

Всё.