Прошу прощения! Всё верно.

Я подправил первый пост. Сейчас правильно.
Отсутствовала запись:

use \RS\Orm\Type as OrmType;

После указания namespace

Ну что? Получается?

Ну тут скорее всего 2 вещи возможны на мой взгляд.
1. max_execution_time надо увеличить на сервере. Обычно это 30 секунд. Возможно просто у Вас сервер не успевает отработать за 30 секунд. Поставьте там ему минут 5 хотя бы.
2. Проверьте права на запись и владельца storage/tmp/siteupdate/backup. Она должна быть 755. Владелец файлов и папок - пользователь, от которого работает PHP. PHP должен работать как CGI.

Это сделано, чтобы отформатировать текст, т.к. он там приведён в чистом тексте и в таком случае учитываются все отступы. Плюс это позволяет на почтовых ящиках, которые режут стили, сохранить форматирование.
Т.е. чтобы у всех пользователей отображалось одинаково. У админа не важно, поэтому и сделали без pre с использованием тегов.

Вы можете при желании перекрыть шаблон письма, своим скопированным шаблоном и убрать тег <pre>

Например если у вас шаблон:

/modules/shop/view/notice/touser_checkout.tpl

заменить на:

/templates/ВАША ТЕМА/moduleview/shop/notice/touser_checkout.tpl

И всё

Sergey T. пишет:

А вы не могли бы поподробней описать в какую часть filters.tpl добавить или заменить ваш код? Я не очень силен в программировании.

Так я же в первом посте привёл код filters.tpl.

Смотрите туда где начинается.

{if $prop.title == 'Цвет'}

В фильтрах просто перебираются фильтры подготовленные от блок контроллера фильтров (/modules/catalog/controller/block/sidefilters.inc.php), и там где идёт список перебираются доступные характеристики.
Я в коде проверяю имя этой характеристики. Если это цвет, то тогда применяю код, который выводит эти блоки с задним фоном. Также обратите внимание на начало этого кода, а именно:

{*Подгружаем цвета*}
{modulegetvars name="\Colors\Controller\BlockValues" var="colors"}
{*Подгружаем цвета*}

Т.е. мы переменной $colors возвращаем массив из заполненных нами цветов в админке из блок контроллера \Colors\Controller\BlockValues.

Вывести значения этой переменной можно так:

<pre>
{var_dump($colors)}
</pre>

А дальше просто смотрите алгоритм.
Попробуйте, если что ещё подскажу.

Как добавить поле товару или любому другому объекту ORM(таблица в базе) в ReadyScript?

Иногда народ интересуется как быстро добавить поле к товару. Например нужна какая-либо дополнительная галочка, или ещё текстовое поле, или картинка для загрузки. В нашей системе всё просто.
Если у Вас есть модуль дополнительный свой можно сделать в нём дополнительные действия, но я буду рассматривать ситуацию когда дополнительного модуля у вас нет и Вы первый раз программируете для RS.
Всё просто.
Рассмотрим ситуацию, когда нам нужно добавить галочку в карточку товара.


Создаём свою папочку в modules с именем Вашего модуля на латинском языке. Например - custom.

Обратите внимание, что в Вашем классе namespace должен соответствовать имени папки в которой лежит. В нашем случае это custom.

Создаём внутри custom папку config. И добавляем в config файл file.inc.php .
Этот файл отвечает за конфигурацию Вашего модуля.
Вставляем туда следующее содержимое:

<?php
namespace Custom\Config;
use \RS\Orm\Type;

/**
* Конфигурационный файл модуля
*/
class File extends \RS\Orm\ConfigObject
{
    
      
}

И сохраняем его.
Теперь создаём файл со сведениями о модуле, которые отвечаю за имя и описание модуля. А именно файл с именем module.xml в той же папке. Вот его содержимое

<?xml version="1.0" encoding="utf-8"?>
<config>
    <defaultValues>    
        <name multilanguage="true">Имя Вашего дополнительного модуля</name>
        <description multilanguage="true">Модуль с дополнительным функционалом</description>        
        <version>1.0.0.0</version>
        <author>ВАШЕ авторские имя</author>        
    </defaultValues>
</config>

Далее в этой же папке config создаём другой файл с именем handlers.inc.php
Этот файл отвечает за добавление полей, навешивания на события, прописывания роутов и др. Подробнее листайте документацию для разработчиков.

Следующий шаг, это то что нам нужно в этом файле указать хук который будет перехвачен при инициализации объекта товара(строка записи из таблицы переводится в ORM объект).
Расширение объекта ORM(таблицы) товара производится через хуки.
Идём на страницу с описанием хуков системы. Читаем и спускаемся ниже к таблице где перечислены Все хуки системы.

В нашем случаем нам нужен хук:
orm.init.КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА 

где КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА будет равно catalog-product
Т.к. файл с ORM объектом у нас находится в

/modules/catalog/model/orm/product.inc.php

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

catalog-product (название папки модуля на латинице-имя файла ORM объекта)

Полное же имя хука будет orm.init.catalog-product

Почему так? Поймёте из документации по хукам!

В файл handlers вставляем следующее содержимое, для добавления поля с именем is_root в таблицу БД:

<?php
namespace Custom\Config;
use \RS\Orm\Type as OrmType;

class Handlers extends \RS\Event\HandlerAbstract
{
    /**
    * Функция инициализирует регистрацию действий
    */
    function init()
    {
        $this->bind('orm.init.catalog-product'); //Сообщаем что у нас появился хук расширяющий товар
    }
    
    /**
    * Расширяем объект товара
    * Обратите внимание на название хука и этой функции . и - не используются 
    *
    * @param array $list
    */
    public static function ormInitCatalogProduct(\Catalog\Model\Orm\Product $orm_product)
    {
         //Расширяем поля
        $orm_product->getPropertyIterator()->append(array(
            t('Основные'), //Вкладка на которую будет добавлено поле, поля в массиве ниже будут приписаны к этой вкладке в конец
            'is_root' => new OrmType\Integer(array( //Название поля в таблице БД и его тип
                'description' => 'Корневой элемент?', //Подпись к полю
                 'maxLength' => 1, //Длинна поля
                'default' => 0, //Значение по умолчанию
                'CheckBoxView' => array(1,0) //Отвечает за отображение в качестве флага(галочки)
            ))
        ));
    }
}

Посмотреть какие ещё поля бывают и какие у них свойства можно загляну в любой другой ORM объект. Или посмотреть типы ORM объектов в папке:
/core/rs/orm/type
В массиве все методы у этих обхектов начинающиеся с setИмяМетода можно указать в массиве как 'ИмяМетода'
Например:

Почти у всех есть метод
setDescription, а в массиве параметров это будет просто

'description' => 'Корневой элемент?'

Т.е. приставка set убирается.
Доступные методы можно подсветить для себя в не олдскульном редакторе через конструкцию такого типа

new OrmType\Integer::set(ctrl+пробел) и Вам выпадет список из доступных параметров для типа Integer поля.

Собственно всё!

Теперь у нас появилось поле is_root у товара.
Осталось добавить это поле в таблицу. Можно это сделать через базу, но не нужно:)
Достаточно лишь в адмике зайти в Управление ->Настройки системы и нажать Исправить структуру БД(справа).
Всё, поле добавлено. Можно пользоваться.
В шаблонах это поле будет доступно например так:

Поле корневой элемент? - {$product.is_root}

Рассмотрим ещё варианты:

Строка

'is_root' => new OrmType\String(array(
       'description' => t('Строка'),
)),

Текст

'is_root' => new OrmType\Text(array(
       'description' => t('Текст'),
)),

Текст с редактором

'is_root' => new OrmType\RichText(array(
       'description' => t('Текст с редактором'),
       'maxLength' => 1000
)),

Число

'is_root' => new OrmType\Integer(array(
       'description' => t('Число'),
       'maxLength' => 11
)),

Картинка

'is_root' => new OrmType\Image(array(
       'maxLength' => '255',
       'max_file_size' => 10000000,
       'allow_file_types' => array('image/pjpeg', 'image/jpeg', 'image/png', 'image/gif'),
       'description' => 'Картинка',
)),

Файл

'is_root' => new OrmType\File(array(
       'description' => t('Файл'),
)),

Выпадающий список

Тут всё несколько сложнее. Нужно понять, что список можно получить 2-мя способами.
1. Из Апи системы. Т.е. вызывается метод, который получает массив значений . Ключи массива будут как значения, значения будут как значения.
Поумолчанию в системе все апи являются наследниками

\RS\Module\AbstractModel\TreeList или
\RS\Module\AbstractModel\EntityList

Автоматически в этих апи есть метод staticSelectList, который получает все нужные нам значения.

//Например, получение регионов доставки
'is_root' => new OrmType\Integer(array(
       'description' => t('Регион'),
       'list' => array(array('\Shop\Model\RegionApi','staticSelectList'))
)),

2. значения из прямо заданного списка:

//Например, получение регионов доставки
'is_root' => new OrmType\String(array(
       'description' => t('Регион'),
       'listFromArray' => array(
            0 => 'Вариант 1',
            'var2' => 'Вариант 2',
            'var3' => 'Вариант 3',
            //и т.д.
       )

)),

Пробуйте!

Читаем статью про темы оформления, чтобы понять как это работает Своя тема оформления

Здравствуйте, довольно часто встречаю в поддержке вопрос:
Как сделать, чтобы курсы валюты обновлялись автоматом на сайте?
На самом деле всё очень просто.
Вам надо создать в корне файл, например с именем:

update_course.php

И вставить туда следующее содержимое:

<?php
    require('setup.inc.php'); //Конфиг который активирует все функции

    $currency_api = new \Catalog\Model\CurrencyApi(); //API валют на сайте
    $currency_api->getCBRFCourseWithUpdate(false);
    echo "<p>OK</p>";

А далее добавьте этот скрипт в свой cron на сервере с желаемой частотой запроса адреса.

Или если вы используете мультисайтовость, то можно сделать так:

<?php
    require('setup.inc.php');//Конфиг который активирует все функции
    
    
    $request = new \RS\Http\Request(); //Класс работы с HTTP запросами
    $site_id = $request->get('site_id',TYPE_INTEGER,false); //Ждём в запросе GET параметр 'site_id' в котором укажем id сайта, если параметр не передан, то смотрится текущий по имени домена, за счёт значения по умолчанию (false)
    
    $currency_api = new \Catalog\Model\CurrencyApi(); //API валют на сайте
    $currency_api->getCBRFCourseWithUpdate($site_id);
    echo "<p>OK</p>";

А далее добавьте этот скрипт в свой cron на сервере с желаемой частотой запроса адреса и параметра. Например, через cron wget

Ну пока не планируется такого изменения.

Напишите заявку здесь. Мы рассмотрим.

Можно. Оставьте пожелание на вот этой странице подачи заявки на улучшение функционала

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

Инструкции конкретно для каждой оплаты нет, но есть общее руководство разработчика, а также материалы для создания собственного модуля, который Вам позволит это сделать. Ответили Вам в приватном сообщении. Сделаю лишь общую выдержку:
http://readyscript.ru/dev-manual/ - общее руководство разработчика.
http://readyscript.ru/text-blog/razraba … nyy-modul/ - разработка модулей
http://readyscript.ru/text-blog/Kak-pra … adyScript/ - расширение функционала
http://readyscript.ru/text-blog/block-c … adyscript/ - разработка блок контроллера (позволяет изучить общий принцип)

Ну код всё равно придётся смотреть.
Перво наперво надо обязательно ознакомится с хуками http://readyscript.ru/dev-manual/dev_hooks.html.
Вам нужен хук. payment.gettypes. Вот на него необходимо подвеситься для того, чтобы добавить свой способ оплаты.
В \shop\config\handlers.inc.php где в методе paymentGetTypes подключатся методы оплаты.
Вам надо используя хук добавить в массив классов оплаты свой класс с помощью paymentGetTypes.
Например так:

В вашем файле модуля \modules\ваша папка модуля\config\handlers.inc.php

Сделать так

<?php
namespace Ваше пространство имен\Config;

/**
* Класс предназначен для объявления событий, которые будет прослушивать данный модуль и обработчиков этих событий.
*/
class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this
            ->bind('payment.gettypes');
    }

    public static function paymentGetTypes($list)
   {
      $list[] = new \Ваше пространство имен\Model\PaymentType\ВашКласс();
      return $list;
   }
}

А дальше уже добавить Ваш класс с внутренней обработкой. Скорее всего Вам лучше будет его переделать из класса Robokassa или Assist.

Файлы классов здесь:
\modules\shop\model\paymenttype\robokassa.inc.php

\modules\shop\model\paymenttype\assist.inc.php

2,614

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

Ну посмотрите через firebug какой шрифт у вас совпал, или перебил текущий при включении режима правки и примените часть этого стиля.

2,615

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

Добавили поддержку этой функции. Обновляйтесь, пожалуйста. После обновления идите в раздел "Каталог товаров". Справа вверху будет кнопка Импорт/Экспорт, выберите там "Импорт изображений из ZIP-архива".

Вячеслав пишет:
Александр пишет:

Вы можете адаптировать как этот модуль под себя, так и использовать стандартные многомерные комплектации с их скриптами. Например так. Выводить характеристики нужные вам. При клике Вы просто обрабатываете данные характеристики собирая значения (Например размер и цвет). Выпадающие списки в многомерных комплектациях вы скрываете. После выбора размеров, в выпадающих списках меняете значение в зависимости от того что выбрано. Например как это было недавно сделано вот здесь http://medpodium-ru.1gb.ru/catalog/bluzony/

Большое спасибо за ответ. С многомерными комплектациями я что-то протупил, с ними еще не разбирался.
PS: только не совсем понял как скрыть выпадающие списки.

Сделайте в стилях им display:none; Вот и всё.

Вячеслав пишет:

А можно такой же модуль только с выбором размера одежды/обуви?

Вы можете адаптировать как этот модуль под себя, так и использовать стандартные многомерные комплектации с их скриптами. Например так. Выводить характеристики нужные вам. При клике Вы просто обрабатываете данные характеристики собирая значения (Например размер и цвет). Выпадающие списки в многомерных комплектациях вы скрываете. После выбора размеров, в выпадающих списках меняете значение в зависимости от того что выбрано. Например как это было недавно сделано вот здесь http://medpodium-ru.1gb.ru/catalog/bluzony/

модуль через встроенный инсталятор не устанавливается

Опишите процесс как устанавливали

Это вообще не предусмотрено для админки.

2,620

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

Да

Судя по скрину это шаблон /moduleview/catalog/list_products.tpl,
Туда уходят сведения о категории в переменную

$dir
А получить заголовок вы можете через конструкцию

{$dir.name}
//Посмотреть все свойства можно так 
<pre>
{var_dump($dir)}
</pre>
AleksC1976 пишет:

А вообще конечно - непорядок. Какой то вшивенький бесплатный Wordpress дает полный контроль над отображением любых элементов и блоков в админ панели для любого пользователя хоть свою админку делай для каждого, и все это за 10-30 минут. А тут коммерческая система - и возможности настройки прав пользователей не предусмотрено. Совсем непорядок )

Чего только стоит одно совмещение учетных записей пользователей и  покупателей. Вот вы предлагаете отключить виджеты совсем - это конечно несложно, но это никак не подходит, а сидеть изучать API полдня, чтобы отключить возможность отображения 1 или нескольких определенных виджетов... Это ж сколько будет стоить магазин тогда (если посчитать временнЫе затраты). Конечно если продать 1 магазин за 500 тысяч - можно сидеть API читать на диванчике, заниматься программированием радостно, админку переделать под себя полностью, еще кое что. Вот меня и Артем убеждает что менеджеры все умные и надо им дать админские права - и не заморачиваться, умные не работают за 20 - 25 тысяч рублей в офисе, и уж точно не занимаются наполнением и ведением интернет магазинов. Грустно все это.


Вот почему так в огромной прекрасной бочке меда - всегда найдется масюсенькая ложечка дегтя. (((

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

у меня fashion ...

fashion тема не адаптивная и поэтому блоки визуально там добавлять не получится. Только при редактировании шаблона.
Посмотрите
пункт о кастомизации

и статью на тему изменения шаблона (Как работать с шаблонами ReadyScript)

Модуль статьи добавляется в шаблоне как

 {moduleinsert name="\Article\Controller\Block\Article" article_id="id статьи или Псевдоним статьи который можно взять в админке в разделе"}

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

Скажите новичку лучше начинать с адаптивной? есть небольшие знания css , html. Знаю что хочу, но не понимаю как происходит управления структурой .

Лучше сначала почитать как работать с шаблонами.. Тогда придёт понимание как всё работает, особенно есть попробуете всё сделать по шагам.
А насчёт с чего начинать. Начните лучше с неадаптивной(fashion).
А такде надо посмотреть как изменять тему оформления перед началом работ

Т.е. проблема решена?)