Прошу прощения! Всё верно.
Я подправил первый пост. Сейчас правильно.
Отсутствовала запись:
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 Сообщения от Александр