Ну вообще здесь рассказано как сделать свой модуль с примером.
А также есть Руководство для разработчика.
Также привожу пример того как сделать модуль который добавляет доп. поле к товару например.
Вот пример рабочего кода
Форум ReadyScript Сообщения от Александр
Ну вообще здесь рассказано как сделать свой модуль с примером.
А также есть Руководство для разработчика.
Также привожу пример того как сделать модуль который добавляет доп. поле к товару например.
Вот пример рабочего кода
Нужно дописать модуль, который будет подписываться на хуки системы.
Вот как надо:
1. В папке modules делаем папку с названием модуля. Например custom
2. В ней создаём папку config
3. В папке config создаём файл file.inc.php с содержимым:
<?php
namespace Custom\Config;
class File extends \RS\Orm\ConfigObject
{
/**
* Возвращает значения свойств по-умолчанию
*
* @return array
*/
public static function getDefaultValues()
{
return array(
//Default - значения
'name' => t('Собственный модуль'),
'description' => t('Позволяет расширять функционал сайта'),
'version' => '1.0.0.0',
'author' => 'Alexander Zakusilo'
);
}
}
Сохраняем.
4. В папке config создаём файл handlers.inc.php с содержимым:
<?php
namespace Custom\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this->bind('orm.init.catalog-product'); //Хук на инициализацию объекта товара.
}
/**
* Функция подвешивается на инициализацию товара
*
*/
public static function ormInitCatalogProduct(\Catalog\Model\Orm\Product $product)
{
$product->getPropertyIterator()->append(array(
t('Основные'),
'new_image' => new Type\Image(array(
'maxLength' => '255', //Длинна поля
'max_file_size' => 10000000, //Максимальный размер загружаемой картинки
'allow_file_types' => array('image/pjpeg', 'image/jpeg', 'image/png', 'image/gif'), //Поддерживаемые типы
'description' => 'Новая картинка', //Название поля
)),
));
return $product;
}
}Сохраняем.
6.Собственно далее идём в Веб-сайт -> Настройка модулей. Сбрасываем кэш. Должен появится наш модуль. После чего устанавливаем его.
7. Идём Управление -> Настройки системы. Справа ищем "Исправить структуру БД". Нажимаем ждём результат.
Всё. Теперь у товара появится поле с добавлением картинки. Тоже самое действие для всех ORM объектов.
P.S.
Ну и напоследок как же к нему обратится?
В обычном случае в шаблонах это выглядит так
{$product.new_picture}т.е. $product.алиас поля добавленного
Но в нашем случае используется изображение, поэтому для отображения существует функция:
{$product->__new_picture->getUrl(700, 304, 'xy')} {$product->__new_picture->getUrl(ширина, высота, 'метод обрезки')}
Подробнее о системе изображений здесь
Включить можно так Включить отображение ошибок.
Ну а если в двух словах. В корне сайта лежит .htaccess
В нём меняем строку
php_flag display_errors offна
php_flag display_errors onДалее идём в админку. Управление -> Настройки системы.
Ставим галку на:
- Всегда проверять шаблоны на предмет модификации
- Подробно отображать информацию об исключениях
Снимаем галку с:
- Включить кэширование данных
- Включить кэширование Smarty
Всё
Добрый день.
Вообщем как-то при продаже маек потребовалось сделать модуль, который выводил бы для фильтров разные в графическом виде. Да так чтобы можно было мышкой ткнуть и выбрался цвет и соответственно применялся фильтр.
Вот решение.
1. Качаем модуль цветов здесь.
2. Закидываем содержимое в папку modules
3. Устанавливаем модуль в админке Веб-сайт -> Настройка модулей. (Ищем Справочник цветов). Ссылка не установлен будет красным цветом
4. После установки обновляем кэш.
5. В меню появится "Цвета" в меню "Магазин".
Алгоритм добавления такой:
1. Создаём характеристику цвет в "Товары"->"Характеристики"
2. Заполняем значения характеристики и сохраняем. Например Красный Синий и т.д.
3. Идём к редактированию товара и выставляем у него значение характеристики цвет.
4. После заполнения значениями характеристики цвет товаров, идём в "Магазин" -> "Цвета". Нажимаем добавить цвет.
5. Указываем название точно равное Варианту цвета. Например "Красный" и собсвенно указываем красный цвет ему. И т.д. Создав палитру.
Работа с шаблонами:
Теперь необходимо вывести наше решение в фильтрах.
Для этого копируем шаблон из
/modules/catalog/view/blocks/sidefilters/filters.tpl
в
/templates/Ваша тема/moduleview/catalog/blocks/sidefilters/
И меняем его примерно так:
{addjs file="history.min.js" basepath="common"}
{addjs file="{$mod_js}jquery.filter.js" basepath="root"}
{*Подгружаем цвета*}
{modulegetvars name="\Colors\Controller\BlockValues" var="colors"}
{*Подгружаем цвета*}
<form method="GET" class="filters" action="{urlmake f=null bfilter=null p=null}">
<div class="side-left">
<div class="overlay"></div>
<div class="properties" data-base-url="{urlmake f=null p=null}">
{foreach from=$prop_list item=item}
{foreach from=$item.properties item=prop}
{if $prop.title == 'Цвет'}
<div class="block block-colors" data-filter-id="{$prop.id}">
<div class="separator-text">ЦВЕТ</div>
<div class="separator"> </div>
<ul>
{foreach from=$prop->getAllowedValues() key=key item=value}
<li {if isset($filters[$prop.id]) && in_array($value, $filters[$prop.id])}class="checked"{/if} data-filter-value="{$value}">
<div class="selected"></div>
<a href="?f[{$prop.id}][]={$value}" class="filter color{if $value=='Разноцвет'} multicolor{/if}" style="background-color:{$colors.colors[$value].color}" title="{$value}"></a>
<input type="checkbox" {if is_array($filters[$prop.id]) && in_array($value, $filters[$prop.id])}checked{/if} name="f[{$prop.id}][]" value="{$value}" style="display:none;"/>
</li>
{/foreach}
</ul>
</div>
{else}
<div class="block block-select" data-filter-id="{$prop.id}">
<div class="separator-text">{$prop.title}</div>
<div class="separator"> </div>
<ul>
{assign var=prop_values value=$prop->getAllowedValues()}
{if $prop.title=='Скидка %' && $prop_values}
{php}unset($prop_values[0]);{/php}
{/if}
{foreach from=$prop_values key=key item=value name=i}
{if !($prop.title=='Скидка %' && $value==0)}
<li {if isset($filters[$prop.id]) && in_array($value, $filters[$prop.id])}class="checked"{/if} data-filter-value="{$value}">
<a class="filter checkbox" href="?f[{$prop.id}][]={$value}">{$value}</a>
<input type="checkbox" {if is_array($filters[$prop.id]) && in_array($value, $filters[$prop.id])}checked{/if} name="f[{$prop.id}][]" value="{$value}" style="display:none;"/>
</li>
{/if}
{/foreach}
</ul>
</div>
{/if}
{/foreach}
{/foreach}
<input type="submit" value="Применить" class="onemore submitFilter" style="display:none;">
</div>
</div>
</form>
<script>
$(function() {
$(function() {
$('.side-left').productFilter({
targetList : '.updatable' //Div в который будет обновлён
});
});
$(window).bind('new-content', function() {
$('.side-left .overlay').hide();
});
$('.filter').on('click',function() {
var wrap = $(this).closest('li');
$(wrap).toggleClass('checked');
if ($(wrap).hasClass('checked')){
$('input',wrap).prop('checked',true).change();
}else{
$('input',wrap).prop('checked',false).change();
}
return false;
});
});
</script>Сохраняем.
Теперь поправим CSS добавив стили нашим цветам. Например добавив в style.css
.block-colors ul .selected {
border: 2px solid #dd0080;
bottom: -2px;
display: none;
left: -4px;
position: absolute;
right: -2px;
top: -4px;
}
.block-colors ul .checked .selected {
display: block;
}
.block-colors ul {
list-style: none outside none;
margin: 0 18px;
overflow: hidden;
padding: 0;
}
.block-colors ul li {
background: none repeat scroll 0 0 #ececec;
float: left;
height: 24px;
margin: 5px;
position: relative;
width: 24px;
}
.block-colors ul .selected {
border: 2px solid #dd0080;
bottom: -2px;
display: none;
left: -4px;
position: absolute;
right: -2px;
top: -4px;
}
.block-colors ul .checked .selected {
display: block;
}
.block-colors ul li a {
box-shadow: 0 0 3px silver;
left: -1px;
position: relative;
top: -1px;
}Добрый день.
Во первых копируем шаблон как описано здесь Как вносить изменения в стандартные шаблоны
После чего нужно скопировать шаблон, который отвечает за отображение вида и отредактировать его.
Если это тема "Классическая", то копируем файл
/modules/main/view/blocks/logo/foot_logo.tpl
в папку /templates/ваша тема/moduleview/main/blocks/logo/
После чего открываем этот файл и редактируем.
Всё предельно просто. Вам необходимо поправить шаблон, добавив в него строку со ссылкой.
Для начала ознакомьтесь со статьёй которая разъясняет, как нужно создавать свои шаблоны Создние шаблона.
Это необходимо потому, что те шаблоны, которые идут в поставке по умолчанию могут обновляться и соотвественно могут быть перезаписаны.
сам шаблон с темой лежит в /templates/ и называется default
Скопируйте скопируйте эту папку и переименуйте. Ну например в default2. Внутри также лежит файл .xml с названием темы оформления. Откройте его и тоже переименуйте в нём название темы.
Далее заходим в админ. панель.:
Веб-сайт -> настройки сайта
Выбираем вновь созданный шаблон и сохраняем его.
Всё, теперь можно работать с шаблоном, не опасаясь, что его подменят во время обновления сайта.
Сам шаблон находится в папке:
корень сайта/modules/catalog/view/blocks/topproducts/top_products.tpl
Его мы копируем в папку:
корень сайта/templates/название нового шаблона/moduleview/catalog/blocks/topproducts/
Далее открываем этот файл:
После строки
{foreach from=$products item=product}Можно добавить следующую строку:
<a href="{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}" class="cartButton addToCart noShowCart" title="В корзину"> </a>Если Вам необходимо, чтобы был полный спектр всех учтённых условий, то в начале файла добавляем:
{assign var=shop_config value=ConfigLoader::byModule('shop')}
{assign var=check_quantity value=$shop_config->check_quantity}А после перебора товаров:
{if $shop_config}
{if $product->shouldReserve()}
<a href="{$router->getUrl('shop-front-reservation', ["product_id" => $product.id])}" class="cartButton inDialog reserv" title="Заказать"> </a>
{else}
{if $check_quantity && $product.num<1}
<span class="cartButton unobt" title="Нет в наличии"> </span>
{else}
<span data-href="{$router->getUrl('shop-front-multioffers', ["product_id" => $product.id])}" class="cartButton showComplekt inDialog" title="В корзину"> </span>
<a href="{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}" class="cartButton addToCart noShowCart" title="В корзину"> </a>
{/if}
{/if}
{/if}Также не забывайте сбрасывать, или отключать кэш Readyscript
Форум ReadyScript Сообщения от Александр