WebAsyst

В последнее время много вопросов как поступало по поводу модуля наложения водяного знака на картинку. 

Модуль для наложения водяног знака:
Когда клиент открывает страницу, например, категории товаров, его браузер запрашивает картинки с сервера. Сервер перенаправляет запрос на модуль.
Модуль берет картинку товара и картинку ватермарка, соединяет и выдает браузеру. Если включено кеширование то эта картинка сохраняется и в будущем сервер не будет нагружаться для соединения картинок, а просто будет выдавать готовую.
Если вы не обладаете уверенностью в своих знаниях устройства движка и работы сервера то лучше уточните соответствие требованиям у хостера и сразу переходите к разделу УСТАНОВКА

Технические требования:
PHP: 5 и выше
Свободное место на диске равное размеру папки products_images в том случае если используется кеширование.
Рекомендуемо
Сервер: Apache(back-end), nginx(front-end)
Минимально
Сервер:Apache

ДЛЯ СПЕЦИАЛИСТОВ:
При установке модуля мы меняем папку хранения картинок товаров.
После установки мы имеем:
products_pictures - папка с кешированными картинками, туда будут падать картинки уже с ватермарком(если включено кеширование)
products_pictures_source - папка с исходными картинками(без ватермарка), туда скрипт будет загружать картинки из админки.

Тем самым происходит следующее:
Если: Apache(back-end), nginx(front-end)
Nginx заходит в папку products_pictures, не находит там запрошенной картинки и проксирует запрос к Apache. Apache читает файл .htaccess видит там реврайт на модуль и перенаправляет запрос к модулю.
Если включено кеширование
Модуль проверяет наличие картинки в кеше(products_pictures), допустим её там нет. Далее проверяет наличие файла в папке с исходными изображениями(products_pictures_source).
Берет исходную картинку, накладывает ватермарк.
Записывает готовое изображение в папку кеша(products_pictures) и напрямую выдает изображение браузеру.
При следующем заходе Nginx обнаружит файл в кеше и напрямую отдаст его без участия apache тем самым не нагружая сервер.
Если кеширование выключено
То записи в кеш происходить не будет и при каждом запросе будет происходить сведение исходного изображения и ватермарка.

Если: только Apache
Для начала хотелось бы сразу сказать что если у вас такая ситуация то вам стоит задуматься о смене хостера или об установке nginx т.к. по моему скромному мнению ресурсы сервера вы используете нерационально. Конечно за исключением частных случав.
Если включено кеширование
И так, поступает запрос на картинку, Apache видит реврайт и отдает запрос сразу скрипту. Скрипт проверяет изображение в кеше, если находит то сразу отдает браузеру. Если не находит то берет исходное изображение и сводит с ватермарком, сохраняет в кеш и опять же отдает браузеру.

Если кеширование выключено
Apache не находит изображение в кеше и при каждом запросе своди исходное изображение с ватермарком, генерируя тем самым нагрузку на сервер. И отдает браузеру сведенную картинку.



УСТАНОВКА
ИМЯ_ВАШЕЙ_БАЗЫ необходимо писать заглавными буквами точ в точ как оно указано, в противном случае на серверах под управлением операционных систем семейства Linux,  скрипт может работать некорректно
1. Заходим на FTP и папку /published/SC/html/scripts/cfg/
2. В файле connect.inc.wa.php заменяем строку(у меня это 112 строка):

Код:

define('DIR_PRODUCTS_PICTURES', DIR_PUBLICDATA_SC.'/products_pictures');

на

Код:

define('DIR_PRODUCTS_PICTURES', DIR_PUBLICDATA_SC.'/products_pictures_source');

3. В браузере заходим в инсталлер(http://адрес_вашего_сайта/installer), переходим  Настройки ->База данных
4. В самом верху увидим Редактировать ИМЯ_ВАШЕЙ_БАЗЫ. Запоминаем что написано на месте ИМЯ_ВАШЕЙ_БАЗЫ. Браузер теперь можно закрыть.
5. На FTP в корне сайта находим и открываем файл .htaccess и перед #shop добавляем следующую строку:

Код:

RewriteRule ^published/publicdata/ИМЯ_ВАШЕЙ_БАЗЫ/attachments/SC/products_pictures/(.*)$ 
products_pictures_watermark.php?photo=$1 [L]

заменив в ней ИМЯ_ВАШЕЙ_БАЗЫ на имя вашей базы полученное в предыдущем пункте.

6.В корне сайта создаем файл products_pictures_watermark.php
7. В этот файл записываем следующий код:

Код:

<?
/**
 * Watermark Plugin
 *
 *
 * @author        Dudin Andrey
 * ICQ                  270576635
 * E-mail              Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
 * @link                http://forum.webasyst.ru/profile.php?id=8134
 * @since        Version 1.0
 * 
 * */
//define('BD_NAME', 'BD_NAME'); //РАСКОММЕНТИРУЙТЕ ТОЛЬКО В СЛУЧАЕ ЕСЛИ СКРИПТ НЕ НАХОДИТ ИМЯ ВАШЕЙ БД
if (!defined(BD_NAME)) {
    $bd_name = scandir('published/publicdata/');
    define('BD_NAME', $bd_name[2]);
}
define('SC_PATH', 'published/publicdata/' . BD_NAME . '/attachments/SC/');
define('IMAGES_FOLDER', 'products_pictures_source'); //Имя папки где лежат изображения без ватермарка
define('WATERMARK_PERCENT', 25); //Сколько процентов от изображения будет занимать ватермарк
define('HEIGHT_BORDER', 0); //Отступ по вертикали
define('WIDTH_BORDER', 0); //Отступ по горизонтали
/*
 * РАСПОЛОЖЕНИЕ ВАТЕРМАРКА ПО ВЕРТИКАЛИ:
 * TOP - сверху
 * BOTTOM - снизу
 */
define('POSITION_Y', 'BOTTOM');
/*
 * РАСПОЛОЖЕНИЕ ВАТЕРМАРКА ПО ГОРИЗОНТАЛИ:
 * LEFT - слева
 * RIGHT - справа
 */
define('POSITION_X', 'RIGHT');
/*
 * КЕШИРОВАНИЕ
 * 
 * Если нагрузка на процессор не страшна, а место дорого то стоит выбрать FALSE
 * СОВЕТУЮ ОСТАВИТЬ TRUE ВО ИЗБЕЖАНИЕ САНКЦИЙ ОТ ХОСТЕРА
 */
define('CATCHING', TRUE); //Использовать кэширование? (TRUE-Да, FALSE-Нет)
/*
 * Имя папки куда складывать изображения с ватермарком(КЭШ)
 * ЭТА ПАПКА СТАНДАРТНА ДЛЯ ДВИЖКА 
 * ЛУЧШЕ НЕ ТРОГАТЬ ЭТОТ ПАРАМЕТР
 */
define('CATCHE_IMAGES_FOLDER', 'products_pictures');
/*
 * НИЖЕ НИЧЕГО ТРОГАТЬ НЕ НУЖНО
 */
$watermark_image = SC_PATH . 'images/watermark.png'; //Картинка водяного знака
$no_image_file = SC_PATH . 'images/nofile.jpg'; //Картинка-заглушка, на случай если запрошенный файл не будет найден.
$product_image = SC_PATH . IMAGES_FOLDER . "/" . $_GET['photo'];
$cache_image = SC_PATH . CATCHE_IMAGES_FOLDER . "/" . $_GET['photo'];
function get_image_res($image_info, $path) {
    switch ($image_info[2]) {
        case 1:
            $type = 'GIF';
            $image = imagecreatefromgif($path);
            break;
        case 2:
            $type = 'JPEG';
            $image = imagecreatefromjpeg($path);
            break;
        case 3:
            $type = 'PNG';
            $image = imagecreatefrompng($path);
            break;
    }
    return $image;
}
if (!file_exists($cache_image) or CATHING==FALSE) {
    if (file_exists($product_image)) {
        $image_info = getimagesize($product_image);
        $file_exist = TRUE;
    } else {
        $product_image = $no_image_file;
        $file_exist = FALSE;
    }
    $image_info = getimagesize($product_image);
    $width = $image_info[0]; //width
    $height = $image_info[1]; //height
    $image = get_image_res($image_info, $product_image);
    $output_image = imagecreatetruecolor($width, $height);
    imagecopyresampled($output_image, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image));
    if ($file_exist) {
        $watermark = imagecreatefrompng($watermark_image);
        $wat_width = (int) (($width / 100) * WATERMARK_PERCENT);
        $koeffx = $wat_width / imagesx($watermark);
        $koeffy = $wat_width / imagesy($watermark);
        $koeff = $koeffx > $koeffy ? $koeffy : $koeffx;
        $watermark_width = intval(imagesx($watermark) * $koeff);
        $watermark_height = intval(imagesy($watermark) * $koeff);
        $position_y = POSITION_Y == 'TOP' ? HEIGHT_BORDER : $height - $watermark_height - HEIGHT_BORDER;
        $position_x = POSITION_X == 'LEFT' ? WIDTH_BORDER : $width - $watermark_width - WIDTH_BORDER;
        imagecopyresampled($output_image, $watermark, $position_x, $position_y, 0, 0, $watermark_width, 
$watermark_height, imagesx($watermark), imagesy($watermark));
    }
    if (CATCHING) {
        imagepng($output_image, $cache_image);
    }
    imagedestroy($watermark);
} else {
    $image_info = getimagesize($cache_image);
    $output_image = get_image_res($image_info, $cache_image);
}
header('Content-type: image/png');
imagepng($output_image);
imagedestroy($output_image);
?>

8. В папку /published/publicdata/ИМЯ_ВАШЕЙ_БАЗЫ/attachments/SC/images/ заливаем файл watermark.png котрый является изображением которое будем накладывать на картинки товаров.
9. Папку /published/publicdata/ИМЯ_ВАШЕЙ_БАЗЫ/attachments/SC/products_pictures необходимо переименовать в products_pictures_source и рядом создать пустую папку products_pictures
10. Папке products_pictures нужно выставить права 775 или 777.


ЕСЛИ У ВАС ИЗМЕНИЛСЯ ВАТЕРМАРК
Вы просто заливаете новый в папку куда лили старый(см Установка) и очищаете папку кеша (по умолчанию она /published/publicdata/ИМЯ_ВАШЕЙ_БАЗЫ/attachments/SC/products_pictures)


НАСТРОЙКИ
Скрипт вполне работоспособен с базовыми настройками. Настроить скрипт можно открыв его для редактирования. Все настройки находятся в шапке файла: /products_pictures_watermark.php

http://supershop.od.ua/index.php?option=com_content&view=article&id=61:joomla-admin&catid=15:joomla&Itemid=154

Используя JQuery плагин «Cloud Zoom» на страницах вашего сайта, можно организовать увеличения изображения с эффектом лупы. При наведении курсора мыши на миниатюру изображения, будет загружена увеличенная версия изображения с возможностью скролинга при перемещении курсора мыши, создавая таким образом эффект увеличения. Далее в статье пойдет речь, как установить данный плагин на движок Shop-Script.

cloud-zoom
Для начала понадобится библиотека JQuery и плагин Cloud Zoom, скачать их можно здесь.
После того, как архив с файлами будет распакован в корень движка, можно начинать редактирование необходимых файлов.
Всего надо будет править 2 файла, это /published/publicdata/[ключ вашей БД]/attachments/SC/themes/[ваша тема]/head.html и /published/SC/html/scripts/templates/frontend/product_brief.html.
В файл head.html добавим строки:

<link rel="stylesheet" href="{$smarty.const.URL_CSS}/cloud-zoom.css" type="text/css">
<script type="text/javascript" src="{$smarty.const.URL_JS}/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="{$smarty.const.URL_JS}/cloud-zoom.1.0.2.min.js"></script>

Напомню, что файл head.html можно редактировать прямо в редакторе дизайна, админки магазина.
Отредактируем код в файле product_brief.html, строка 21 начинается с комментария <!— Thumbnail —>, за ним идет ссылка которую необходимо изменить, на такую:

<a class ="cloud-zoom" href="{$smarty.const.URL_PRODUCTS_PICTURES}/{$product_info.big_picture|escape:'url'}" rel="position: 'inside' , showTitle: false, adjustX:-4, adjustY:-4">

Обратите внимание, что меняются только атрибуты, тело ссылки остается прежним.
На этом интеграция завершена.

Сегодня в этой статье я расскажу вам как принаведении на картинку увеличить ее до вашего определенного размера .

 

1. Для начала вам нужно Cкачать архив со скриптами

2. Скачаный архив распаковываем и 2 java-скрипта и заливаем в папку "http://Ваш_сайт.com/published/SC/html/scripts/js"

3. В файле "http://Ваш_сайт.com/published/SC/html/scripts/templates/frontend/product_brief.html"


Ищем строку:


<!-- Thumbnail -->
<a {$target} href='{$_product_url}'>{if $product_info.thumbnail}<img src="/{$smarty.const.URL_PRODUCTS_PICTURES}/{$product_info.thumbnail|escape:'url'}" alt="{$product_info.name|escape:'html'}" title="{$product_info.name|escape:'html'}">
{elseif $product_info.picture}<img src="/{$smarty.const.URL_PRODUCTS_PICTURES}/{$product_info.picture|escape:'url'}" alt="{$product_info.name|escape:'html'}" title="{$product_info.name|escape:'html'}">{/if}</a>


И заменяем ее на:


<!-- Thumbnail -->
<a {$target} href='{$_product_url}'{if $product_info.big_picture} class="supershop" name='<img src="/{$smarty.const.URL_PRODUCTS_PICTURES}/{$product_info.big_picture}"/>'{/if}>{if $product_info.thumbnail}<img src="/{$smarty.const.URL_PRODUCTS_PICTURES}/{$product_info.thumbnail|escape:'url'}" alt="{$product_info.name|escape:'html'}" title="{$product_info.name|escape:'html'}">
{elseif $product_info.picture}<img src="/{$smarty.const.URL_PRODUCTS_PICTURES}/{$product_info.picture|escape:'url'}" alt="{$product_info.name|escape:'html'}" title="{$product_info.name|escape:'html'}">{/if}</a>


 

 

4. В CSS (в редакторе дизайна шаблона) в любом месте дописываем:


.seorominBox img { width: 250px; } 


 Цифра 250px означает ширину в пикселях. До этого размера будет увеличена картинка при наведении. Этот параметр можете выставить самостоятельно по желанию.

 

5. В head (в редакторе дизайна шаблона) дописываем : 


 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script type="text/javascript" src="/{$smarty.const.URL_JS}/tooltipsy.min.js"></script>
<script type="text/javascript" src="/{$smarty.const.URL_JS}/seoromin.js"></script>

 


 

6. Рекомендуем очистить кеш в webAsyst Installer зайдя в раздел "Диагностика" и нажав "Сброс кеша"

Важна внутренняя оптимизация сайта.

По вопросам и установки и создания сайтов или модулей пишите в тех.поддержку Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. Либо в раздел вопрос-ответ

Содержание:
1. Создание шаблона
2. Каскадные таблицы стилей CSS
3. Редактирование дизайна существующего шаблона
4. Переход от smarty к php (создание плагинов)
5. Общая, краткая структура файлов
6. Краткие сведения о переменных smarty, которые используются в данном продукте


1.Создание шаблона
Как и при работе с другими системами управлении сайтами, создание шаблона для Webasyst Shop-
Script следует начинать с верстки вашего макета в обычный html файл и таблицу стилей css.
Далее в папке /www/published/SC/html/scripts/repo_themes/ создаем папку с именем вашего
шаблона. Разработчики рекомендуют добавлять к названию шаблона префикс user_, чтобы при
обновлении ваш шаблон никуда не пропал.
(Например, “user_mystyle”).
Внутри этой папки создадим пустую папку “temp_overridestyles” – для переопределенных через
конструктор стилей.

Информация о шаблоне:

Создаем файл theme.xml и пишем в нем следующее:
<?xml version="1.0" encoding="ISO-8859-1"?>
<theme id="user_mystyle" last_modified="2009-04-03 10:00:00">
<title><![CDATA[My Style]]></title>
<components_settings>
<component id="htmlcode">
<setting name="caption" value="HEllo text - 125"></setting>
<setting name="manage_htmlcode" value=""></setting>
</component>
</components_settings>
</theme>

Шапка шаблона:

Создаем файл head.html, в нем пишем:
<title>{$page_title|default:$smarty.const.CONF_DEFAULT_TITLE|escape:'html'}</title>
{$page_meta_tags}
{literal}скрипты и теги, которые вы хотите добавить между тегами <head></head>{/literal}
Свой файл стилей переименовываем в main.css.
(Я бы рекомендовал взять этот файл из другого шаблона, так как там очень много стилей, и я не готов дать перечень всех
необходимых стилей. В уже существующий файл просто добавить свои стили.)

Витрина магазина:

Создаем файл home.html, в нем пишем
<!-- cpt_container_start -->{cpt_root_categories categories_col_num='3' show_sub_category='enable_sub_category'
subcategories_numberlimit='' subcategories_delimiter=' '}<!-- cpt_container_end -->
можно оставить только «<!-- cpt_container_start --><!-- cpt_container_end -->», а остальное через конструктор.
Основная разметка шаблона:
Создаем файл index.html в него вставляем все содержимое нашего начального макета, которое
находится между тегами <body></body>.


В местах, где должны появиться какие-то функциональные блоки (Новости, навигация, главное
содержимое, логотип, выбор языка и т.д.) вставляем код:
<!-- cpt_container_start --><!-- cpt_container_end -->
Файлы overridestyles.php и overridestyles.css копируем из другого шаблона.
Детальная информация о товаре:
Файл product_info.html можно скопировать из другого шаблона или создать свой со следующим
содержимым:
<!-- cpt_container_start -->{cpt_product_name}<!-- cpt_container_end -->
<div id="prddeatailed_container">
{cpt_product_images}
<!-- cpt_container_start --
>{cpt_product_params_selectable}{cpt_product_params_fixed}{cpt_product_rate_form}{cpt_product_price}{cpt_product_add2cart_button}{
cpt_product_description}<!-- cpt_container_end -->
</div>
<!-- cpt_container_start -->{cpt_product_discuss_link}{cpt_product_related_products}{cpt_product_details_request}<!-- cpt_container_end -->
Файл thumbnail.jpg – мини изображение шаблона.
Все остальные можно сделать через админ-панель сайта с помощью Конструктора (WYSIWYG).
«Перетащить» любой модуль можно на позицию где мы вставляли код «<!-- cpt_container_start --><!--cpt_container_end -->».
Все дальнейшие правки лучше делать уже через админ-панель.
Если изменения вносить снова в папке repo_themes, то нужно очистить кэш через инсталлятор или в папке /published/publicdata/{DB_KEY}/attachments/SC/themes/user_mystyle.
Все. Наш шаблон готов!
Краткое руководство программиста Webasyst Shop-Script


2. Каскадные таблицы стилей (файл css)

Классы и идентификаторы объектов, используемые в Shop-Script:
Блоки (div):
.cpt_news_short_list – краткий список новостей на главной
.cpt_category_tree – дерево категорий
.cpt_maincontent – главное содержание
.cpt_currency_selection – выбор валюты
.cpt_language_selection – выбор языка
.cpt_divisions_navigation – ссылки на разделы
.cpt_auxpages_navigation – ссылки на информационные страницы
.cpt_survey – блок голосования
.cpt_root_categories – категории на главной (витрина)
.cpt_product_lists – список продуктов (например, «специальные предложения»)
.cpt_tag_cloud – облако тегов
Общие для всего магазина:
ul.vertical, ul.horizontal – вертикальный или горизонтальный (соответственно) список ссылок
(используется в навигации разделов и инф. страниц)
.cpt_shopping_cart_info – корзина (уменьшенная, на всех страницах)
.survey_question – вопрос голосования
.cpt_category_tree ul – список категорий
.cpt_category_tree ul a – ссылки в списке категорий
.cpt_category_tree ul a:hover – ссылка в списке категорий при наведении мышкой
.cpt_category_tree .parent a – ссылка на родительскую категорию, в списке категорий
.cpt_category_tree .child a – ссылка на подкатегорию, в списке категорий
.cpt_category_tree .parent_curent a, .cpt_category_tree .child_curent a – текущая (активная) категория и
подкатегория
.bullet – блок в списке категорий перед ссылкой
.tab – блок в списке категорий перед ссылкой подкатегории, количество таких блоков соответствует
уровню подкатегории
.cpt_product_add2cart_button – кнопка «добавить в корзину»
h1.welcome – надпись под витриной на главной
#searchstring – поле ввода поиска продуктов
.error_block – блок вывода ошибок
.news_date – дата новости
.news_title – заголовок новости
.news_viewall а – ссылка на все новости
.news_subscribe – подписка на новости
.news_thankyou – сообщение после подписки на новости
#cat_advproduct_search – блок расширенного поиска в категории
.row_odd td – нечетная строка в корзине
.row_even td – четная строка в корзине
#powered_by – надпись «работает на Webasyst shop-scrip»

Продукт:
.regularPrice – старая цена
.totalPrice – общая цена
.youSaveLabel – надпись «вы экономите в %»
.youSavePrice – в деньгах
.prd_out_of_stock – надпись «нет на складе»
.prdbrief_name – название товара
.review_block – блок отзывов
.review_title – заголовок отзыва
.review_date – дата отзыва
Обычно этого хватает. 


3. Редактирование дизайна существующего шаблона
Дизайн -> Редактор дизайна -> Текущая тема -> Редактировать
В режиме конструктора все интуитивно понятно и, как мне кажется, не требует лишних пояснений.

Переходим в режим Редактировать HTML-код.
Все функциональные блоки заключены в между <!-- cpt_container_start --> и <!-- cpt_container_end-->
Например,
<!-- cpt_container_start -->{cpt_logo file='sls_logo.gif' overridestyle=':7gjdmx'}<!-- cpt_container_end-->
cpt_logo – идентификатор объекта
overridestyle – идентификатор переопределенного стиля, когда вы два раза кликнете по блоку,
там есть checkbox “переопределить стили”
Некоторые блоки имеют дополнительные параметры.
Примеры блоков – описание – параметры :
{cpt_logo file='sls_logo.gif' overridestyle=':7gjdmx'} – логотип – файл логотипа
{cpt_shopping_cart_info overridestyle=':usix7z'} – корзина
{cpt_currency_selection overridestyle=':ew8dku'} – выбор валюты
{cpt_language_selection view='flags' overridestyle=':9z8isi'} – выбор языка – флаги или выпадающий список
{cpt_divisions_navigation divisions='29:54:183:107:32:189' view='horizontal' overridestyle=':6sqpv6'} – навигация по
разделам – список разделов – горизонтальная(вертикальная)
{cpt_auxpages_navigation select_pages='all' auxpages='' view='vertical' overridestyle=':4df0k7'} – навигация информ.
страниц
{cpt_category_tree overridestyle=':wpe3jv'} – дерево категорий
{cpt_product_search overridestyle=':z1u93x'} – поиск продуктов
{cpt_maincontent overridestyle=':vg6a7y'} – главное содержание
{cpt_tag_cloud tags_num='50' overridestyle=':uxbg09'} – облако тэгов – количество тэгов
{cpt_custom_html code='0m8bt2r7' overridestyle=':kagfdl'} – пользовательский html код – id кода


4. Переход от smarty к php (создание плагинов)

Некоторый функционал сложно или просто невозможно реализовать на smarty, а иногда просто
проще вернуться к уже знакомому языку программирования.
В smarty есть такая возможность, с помощью плагинов.
Рассмотрим создание плагина на примере.
Задача: в определенном месте вывести надпись “Hello world” с помощью php.
В папке /published/SC/html/scripts/smarty/plugins создаем файл function.myfunction.php с
содержанием:
(В новой версии скриптов плагины лежат в папке /kernel/includes/smarty/plugins)
<?php
function smarty_function_myfunction($params, &$smarty) {
return 'Hello, world!';
}
?>
Теперь в нужном месте html-файла необходимо вставить тег {myfunction}.
Чтобы эти теги работали в информационных страницах, нужно:
В файле \published\SC\html\scripts\templates\frontend\aux_page.html после открывающейся “{”
добавить - eval var=
Плагины в смарти делятся на несколько типов:
· function - функции
· modifier - модификаторы (например, {$str|capitalize})
· block - блоки (блоковые функции, например {foreach}…{/foreach})
· compiler - функции, запускаемые во время компиляции
· prefilter - фильтр шаблона, запускаемый перед компиляцией (работает с исходником шаблона)
· postfilter - фильтр шаблона, запускаемый после компиляции (работает с результатом компиляции
шаблона - php-кодом, который сохраняется на диск в папку templates_c)
· outputfilter - фильтр шаблона, запускаемый после компиляции шаблона, но до вывода результатов
этой компиляции
· resource - ресурсы (для взаимодействия с базой данных, сокетами и т.д.)
· insert - для тега {insert}
Мы сейчас писали плагин первой категории, т.е. function, поэтому имя файла начинается с этого
слова. А вообще, файл должен называться по таким правилам:
тип_плагина.имя_функции.php
А функция в самом файле плагина должна именоваться по таким правилам:
smarty_[тип_плагина]_[имя_функции]

Вместо вывода фразы вставляем тот функционал, который нам нужен.
Пример использования:
Гостевая и новый модуль оплаты к Webasyst Shop-Script http://uses.habrahabr.ru/blog/57292/



5. Общая, краткая структура файлов
data ваши файлы, защищенные сервером
%DB_KEY%
attachments
SC файлы продуктов в Shop-Script
products_files электронные продукты
dblist настройки баз данных
account.log лог изменений аккаунта
wbs.log лог авторизаций в системе
includes файлы для первоначальной установки
kernel ядро
includes
smarty
plugins - папка плагинов smarty
errors.log общий лог ошибок
published скрипты приложений и данные
AA Account administrator
html основные скрипты
scripts основные скрипты
MW Мой профиль
html основные скрипты
scripts основные скрипты
SC Shop-Script
html основные скрипты
scripts Shop-Script
core_functions основные функции скрипта (core – ядро)
images изображения
images_common служебные изображения
js JavaScript-библиотеки
modules различные модули
auxpages информационные страницы
discount_coupons дисконт-купоны
feedback обратная связь
localization управление локализацией и языками
news новости
payment модули оплаты
shipping модули доставки
products_files файлы перенесены — смотрите
data/%DB_KEY%/attachments/SC/products_files
repo_themes оригинальный файлы шаблонов дизайна (без изменений
дизайн-редактора)
templates шаблоны отдельных компонентов магазина
backend администрирование


email email-уведомления
forms печатные формы
frontend пользовательская часть
sms SMS-уведомления
tinymce визуальный редактор
UG Пользователи
html основные скрипты
scripts основные скрипты
WG Виджеты (кроме виджетов SC)
html основные скрипты
scripts основные скрипты
common используется всеми приложениями
publicdata ваши файлы, доступные по www
%DB_KEY% общедоступные файлы приложений
attachments
SC ваши данные: изображения, темы, файлы sitemap, rss и т.д.
wbsadmin Инсталлер
html основные скрипты
scripts основные скрипты
system новое ядро
temp временные файлы, логии
.htaccess основной .htaccess для скриптов WebAsyst
index.php работает только в случае выключенного mod_rewrite

Общая структура
/data/ - файлы, загружаемые пользователями в приложениях, которые не должны быть доступны напрямую из браузера; 
/dblist/ - XML-описания баз данных; 
/kernel/ - ядро. файлы, которые не должны быть доступны по HTTP и являются общими для всех сервисов; 
/published/ - файлы, к которым идет обращение по HTTP, содержит: код конкретных сервисов (имеют двухбуквенные имена: AA, CM, etc.); 
/published/common/ - общие файлы, отдающиеся по HTTP (images, javascript, css, etc.); 
/published/publicdata/ - файлы аккаунтов, которые нужно отдавать в браузер (изображения в книгах, картинки продуктов Shopping Cart). должны быть доступны напрямую по адресу; 
/published/wbsadmin/ - управление установкой WebAsyst (настройка доступа к базе данных, настройка отображения Frontend, общие системные настройки). 
/temp/ - временные файлы.

Ключевые файлы
на что обратить внимание если что-то не работает, или что-то нужно изменить: 
/kernel/wbs.xml - содержит основные настройки установки: параметры подключения к Mysql-серверу, доступные для выбора языки, другие системные настройки; 
/kernel/includes/smarty/compiled/ - в эту директорию складываются откомпилированные шаблоны Smarty, обязана быть доступна для записи; 
/temp/ - также должен быть доступен для записи; 
/dblist/ - все настройки конкретной БД (доступ к базе данных, установленные приложения, выбранный тарифный план), хранятся в XML-описании базы данных. 
/data/ и /published/data/ - все приложенные файлы (картинки продуктов Shopping Cart, файлы сервиса Files, etc) сохраняются в эти директории. publicdata - для тех файлов, которые должны быть доступны напрямую. поддиректории внутри них создаются по принципу <имя базы данных>/attachments/<имя приложения>/. 
К примеру, файлы картинок Shopping Cart в базе данных TEST будут находится по адресу /published/publicdata/TEST/attachments/SC/products_pictures/

Сервисы
1. Все сервисы находятся в /published/ и обозначены двумя символами;
2. В установке обязательно есть сервисы:

  • AA - Control Panel (Панель управления) - управление аккаунтом, также содержит в себе общие строки локализации;
  • UG - Users and Groups (Пользователи и группы) - управление пользователями, группами, правами.
  • MW - My Webasyst (Мой Аккаунт) - управление текущим юзером. Фактически вызывает экран редактирования текущего пользователя из UG;
  • WG - Widgets (Виджеты) - общая инфраструктура виджетов.

Заказать дипломную работу

3. Все сервисы WebAsyst (за исключением Shopping Cart - SC) имеют примерно одинаковую структуру:

  • /help/ - файлы справки сервиса;
  • /html/ - скрипты и шаблоны конкретных экранов;
  • /html/ajax/[optional] - ajax-handler'ы;
  • /html/cssbased/ - smarty-шаблоны, используемые скриптами (в большинстве случаев имя шаблона совпадает с именем скрипта);
  • /html/img/ - картинки, используемые сервисом (в том числе значок, и картинка сервиса в верхней панели);
  • /html/scripts/ - скрипты экранов, вызываются по HTTP напрямую;
  • /includes/[optional] - разнообразные приложения к сервису;
  • /localization/ - файлы локализации сервиса;
  • /reports/[optional] - файлы отчетов;
    __________________________________________________________
    _screens.php - содержит информацию о главном экране сервиса: адрес, локализованное название, необходимые права. нужен, чтобы не грузить всю информацию о сервисе при загрузке любой страницы;
    wbs_application.xml - XML-описание сервиса, описывает связь с другими сервисами, если это необходимо. например при удалении пользователя опрашиваются другие сервисы - не задействован ли он в них
    xx_metadata.sql - SQL-инструкции, вызываемые при подключении приложения в базу (создают таблицы, необходимые сервису); 
    user_rights.php - описывает дерево прав сервиса;
    __________________________________________________________
    xx.php - файл, подключающий все функции сервиса;
    xx_consts.php - константы;
    xx_dbfunctions_cmn.php - бизнес-логика сервиса;
    xx_functions.php - вспомогательные функции;
    xx_queries.php - шаблоны SQL-запросов к БД (используются в xx_dbfunctions_cmn.php);


Shopping Cart
Shopping Cart имеет отличающуюся от остальных сервисов структуру файлов, схожую со структурой Shop-Script:

  • Все скрипты сервиса находятся в директории /published/SC/html/scripts/
  • Исходной точкой запуска для всех экранов SC (как Backend, так и Frontend) является файл index.php;
  • За преобразование URL отвечает файл /published/SC/html/scripts/.htaccess, а при включении ЧПУ также файл /.htaccess находящийся в корне установки;
  • Для доступа к базе данных и сохранению файлов SC использует инфраструктуру WebAsyst:
    • все пользовательские данные (файлы шаблонов, изображения продуктов, приложенные файлы) сохраняются как файлы сервиса SC в директории /published/publicdata/ и /data/;
    • параметры доступа к базе данных хранятся в файле XML в директории /dblist/;
    • но, локализация SC не хранится в файлах;


frame.html - каркас страниц (теги <html></html><head></head><body></body>)
category_tree.html - отображение дерева категорий на боковой панели
category.tpl.html - содержимое категории (подкатегории, товары)
product_brief.html - отображение товара в списке категории или в результатах поиска

customer_survey.html - голосование

login.html - форма входа для клиентов. Читаем здесь.

m.* - шаблоны для PDA User-Agent-ов. Еще не разбирался.

news.frontend.shortlist.tpl.html - Шаблон новостей для боковой панели
news.frontend.list.tpl.html - Список новостей
news.frontend.post.tpl.html - Просмотр выбранной новости

order_* - шаблоны заказа
checkout.* - шаблоны оформления заказа

product_name.htmlproduct_description.htmlproduct_price.html - Название товара, описание, цена

product_discussion.html - Все отзывы о товаре + написать отзыв
product_discuss_link.html - Последние отзывы о товаре

product_images.html - Способ отображения фотографий товара

product_list.html - Ограниченый список (новинки, распродажа...)

product_params_fixed.html и product_params_selectable.html - доп.характеристики товара

product_rate_form.html - рейтинг товара (звездочки)

product_related_products.html - "Советуем посмотреть"

register* - шаблоны форм регистрации

root_categories.html - перечень категорий и подкатегорий товаров (по умолч. на главной странице)

shopping_cart_info.html - Корзина на боковой панели
shopping_cart.html - страница корзины (в виджете или на отдельной странице)