Прошу прощения! Всё верно.
Я подправил первый пост. Сейчас правильно.
Отсутствовала запись:
use \RS\Orm\Type as OrmType;После указания namespace
Форум ReadyScript Сообщения от Александр
Прошу прощения! Всё верно.
Я подправил первый пост. Сейчас правильно.
Отсутствовала запись:
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И всё
А вы не могли бы поподробней описать в какую часть 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
Ну посмотрите через firebug какой шрифт у вас совпал, или перебил текущий при включении режима правки и примените часть этого стиля.
Добавили поддержку этой функции. Обновляйтесь, пожалуйста. После обновления идите в раздел "Каталог товаров". Справа вверху будет кнопка Импорт/Экспорт, выберите там "Импорт изображений из ZIP-архива".
Александр пишет:Вы можете адаптировать как этот модуль под себя, так и использовать стандартные многомерные комплектации с их скриптами. Например так. Выводить характеристики нужные вам. При клике Вы просто обрабатываете данные характеристики собирая значения (Например размер и цвет). Выпадающие списки в многомерных комплектациях вы скрываете. После выбора размеров, в выпадающих списках меняете значение в зависимости от того что выбрано. Например как это было недавно сделано вот здесь http://medpodium-ru.1gb.ru/catalog/bluzony/
Большое спасибо за ответ. С многомерными комплектациями я что-то протупил, с ними еще не разбирался.
PS: только не совсем понял как скрыть выпадающие списки.
Сделайте в стилях им display:none; Вот и всё.
А можно такой же модуль только с выбором размера одежды/обуви?
Вы можете адаптировать как этот модуль под себя, так и использовать стандартные многомерные комплектации с их скриптами. Например так. Выводить характеристики нужные вам. При клике Вы просто обрабатываете данные характеристики собирая значения (Например размер и цвет). Выпадающие списки в многомерных комплектациях вы скрываете. После выбора размеров, в выпадающих списках меняете значение в зависимости от того что выбрано. Например как это было недавно сделано вот здесь http://medpodium-ru.1gb.ru/catalog/bluzony/
модуль через встроенный инсталятор не устанавливается
Опишите процесс как устанавливали
Это вообще не предусмотрено для админки.
Да
Судя по скрину это шаблон /moduleview/catalog/list_products.tpl, 
Туда уходят сведения о категории в переменную 
$dir
А получить заголовок вы можете через конструкцию
{$dir.name}
//Посмотреть все свойства можно так 
<pre>
{var_dump($dir)}
</pre>А вообще конечно - непорядок. Какой то вшивенький бесплатный 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).
А такде надо посмотреть как изменять тему оформления перед началом работ
Т.е. проблема решена?)
Форум ReadyScript Сообщения от Александр