Категории |
Примеры плагиновПримеры плагинов <?php //функции для установки, удаления плагина //функция для установки имеет вид имя_файла_install() function test0_install() { global $db; // чаще всего при установке плагина требуется выполнить какие то запросы или добавить какие либо опции к плагину $db->query('drop table if exists '.DB_PREFIX.'test'); $db->query("CREATE TABLE ".DB_PREFIX."test( test_id int NOT NULL auto_increment, product_id int NOT NULL, PRIMARY KEY (test_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;"); } //функция для установки имеет вид имя_файла_remove() function test0_remove() { global $db; //удаляем базу при удалении плагина $db->query('drop table if exists '.DB_PREFIX.'test'); } ?> для пример смотреть любой плагин Скачать пример 0 1. Создание страниц <?php //страница в магазине // страница доступна по адресу http://магазин/index.php?page=test1_page1 add_action('page', 'test1_page1'); // страница доступна по адресу http://магазин/index.php?main_page=test1_page2 add_action('main_page', 'test1_page2'); // страницы доступны в дминке // страница доступна по адресу http://магазин/admin/plugins_page.php?page=test1_page_admin add_action('page_admin', 'test1_page_admin'); // страница доступна по адресу http://магазин/admin/plugins_page.php?main_page=test1_main_page_admin add_action('main_page_admin', 'test1_main_page_admin'); function test1_page1() { echo 'Тестовая страница'; } function test1_page2() { echo 'Тестовая страница 2'; } function test1_page_admin() { echo 'Тестовая страница в админке'; } function test1_main_page_admin() { echo 'Тестовая страница в админке 2'; } ?> смотреть так же плагин vote Скачать пример 1 2. Создание блока блок будет доступен после добавление метки {$my_box} в шаблон themes/шаблон/index.html <?php //Создание блока //блок будет доступен после добавление метки {$my_box} в шаблон themes/шаблон/index.html add_action('box', 'my_box'); function my_box() { $title = 'Мой блок'; $content = 'Содержимое блока'; return array('title' => $title, 'content' =>$content); } ?> смотреть так же плагин vote Скачать пример 2 3. Работа с блоками. Замена одного блока на другой <?php // заменить один блок, на другой //замена блока вывода списка категорий на блок "Мой блок 2" rewrite_action('box', 'box_CATEGORIES', 'my_box2'); function my_box2() { $title = 'Мой блок 2'; $content = 'Содержимое блока 2'; return array('title' => $title, 'content' =>$content); } ?> смотреть так же плагин cat_drop_down 4. Опции и локализации плагина test4.php <?php //Опции плагинв function test4_install() { //test4_radio - название опции //false текущее значение //radio - тип опции // array('true','false') - варианты значения опции add_option('test4_radio', 'false', 'radio', "array('true','false')"); add_option('test4_checkbox', 'false', 'checkbox', "array('true','false')"); //для вывода блока для ввода текст <input type="text"> add_option('test4_radio1', 'текст 1', 'input'); //или вот так add_option('test4_radio2', 'текст 2'); add_option('test4_textarea', 'поле textarea', 'textarea'); //поле readonly. только для вывода данныз //данные берутся из функции test4_readonly() add_option('test4', '', 'readonly'); } function test4_readonly() { echo '<font color="red">Вывод данных опции readonly</font>'; } ?> //файл локализации // код_языка.php ru.php <?php //test4_radio - название опции $lang['test4_radio'] = 'Опция test4_radio'; $lang['test4_radio_desc'] = 'Описание опции test4_radio'; $lang['test4_radio1'] = 'Опция test4_radio1'; $lang['test4_radio1_desc'] = 'Описание опции test4_radio1'; $lang['test4_radio2'] = 'Опция test4_radio2'; $lang['test4_radio2_desc'] = 'Описание опции test4_radio2'; $lang['test4_checkbox'] = 'Опция test4_checkbox'; $lang['test4_checkbox_desc'] = 'Описание опции test4_checkbox'; //test4_textarea - название опции $lang['test4_textarea'] = 'Опция test4_textarea'; $lang['test4_textarea_desc'] = 'Описание опции test4_textarea'; ?> вот что получилось Скачать пример 4 5. Добавление вкладок в редакторе товаров и категорий <?php //только для версии 2.5.6 и выше //добавление вкладки в редактор товаров add_filter('news_product_add_tabs', 'test6_news_product_add_tabs'); function test6_news_product_add_tabs($array) { $array['values'][] = array( 'tab_name' => 'test6', 'tab_content' => 'Текст вкладочки test6' ); return $array; } add_filter('news_category_add_tabs', 'test6_news_category_add_tabs'); function test6_news_category_add_tabs($array) { $array['values'][] = array( 'tab_name' => 'test6', 'tab_content' => 'Текст вкладки test6 для категорий' ); return $array; } ?> 6. Блок со своим html файлом function simple_box() { // code } Теперь разберем содержимое функции simple_box() <?php function simple_box() { // Для того, чтобы в функции можно было работать со Smarty // нужно вызвать глобальную переменную $osTemplate global $osTemplate; // вызываем класс osTemplate $box = new osTemplate; // указывает на то, что директорией для шаблона является папка плагина. // то есть, чтобы $box->fetch подхватывал файлы шаблона именно из папки плагина $box->template_dir = plugdir(); // какой файл будет отвечать за вывод шаблона блока. // так же, в этот файл нужно будет передавать нужные данные для отображения // но передача вывода данных - другая тема (возможно следующая) $_box_value = $box->fetch('simple_box.html'); // переменная smarty которая и будет, собственно, выводить блок. // переменная $_box_value содержит в себе подключение файла блока // SIMPLE_BOX - может иметь любое название // эту переменную необходимо будет разместить в index.html вашего шаблона $osTemplate->assign('SIMPLE_BOX', $_box_value); } ?> Теперь в папке нашего плагина создадим HTML файл simple_box.html И напишем в нем буквально одно слово - Привет После этого откроем файл шаблона index.html и в удобное место вставим переменную {$SIMPLE_BOX} Далее, включаем наш плагин, переходим на главную и видим слово "Привет" в том месте. где установили {$SIMPLE_BOX} Конечным вариантов файл плагина будет такой <?php /* Plugin Name: Название плагина Plugin URI: Ссылка на плагин Version: Версия плагина Description: Описание плагина Author: Автор плагина Author URI: Ссылка на автора (блог, личный сайт и т.д..) Plugin Group: Группа (можно сортировать плагины по круппам, если таковые задавать) */ // Добавляем экшон add_action('box', 'simple_box'); // функция для экшона simple_box function simple_box() { // Для того, чтобы в функции можно было работать со Smarty // нужно вызвать глобальную переменную $osTemplate global $osTemplate; // вызываем класс osTemplate $box = new osTemplate; // указывает на то, что директорией для шаблона является папка плагина. // то есть, чтобы $box->fetch подхватывал файлы шаблона именно из папки плагина $box->template_dir = plugdir(); // какой файл будет отвечать за вывод шаблона блока. // так же, в этот файл нужно будет передавать нужные данные для отображения // но передача вывода данных - другая тема (возможно следующая) $_box_value = $box->fetch('simple_box.html'); // переменная smarty которая и будет, собственно, выводить блок. // переменная $_box_value содержит в себе подключение файла блока // SIMPLE_BOX - может иметь любое название // эту переменную необходимо будет разместить в index.html вашего шаблона $osTemplate->assign('SIMPLE_BOX', $_box_value); } ?> Сам плагин прикреплен к посту Если что-то не так описал - сори! 7. Работа с товарами категорий <?php add_filter('products_listing', 'products_listing_func'); function products_listing_func( $value ) { $value['PRODUCTS_NAME'] .= ' <img src="'.plugurl().'new.gif" />'; return $value; } ?> пример добавления новой метки <?php add_filter('products_listing', 'products_listing_func'); function products_listing_func( $value ) { //для всех товаров добавляется метка {$module_data.demo} $value['demo'] = ' test'; return $value; } ?> и в шаблоне themes\шаблон\module\product_listing\product_listing~.html в цикле вывода товаров можно использовать нашу новую метку {$module_data.demo} {foreach name=aussen item=module_data from=$module_content} {php}$col++;{/php} ...... {$module_data.demo} .... {/foreach} какие вообще параметры можно фильтровать можно посмотреть так add_filter('products_listing', 'products_listing_func'); function products_listing_func( $value ) { print_r($value ); return $value; } ?> для наших 4ех товаров в категории выводится следующее Array ( => HP 2133 => => 0 => => 73 => => http://shopos/shopos/images/product_images/thumbnail_images/../noimage.gif => http://shopos/shopos/product_info.php?products_id=73 => 15.000,0 руб. => 15000 => => +<a href="http://shopos/shopos/popup_content.php?coID=1" target="_blank" onclick="window.open('http://shopos/shopos/popup_content.php?coID=1', 'popUp', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=395,height=320'); return false;">доставка</a> => <a href="http://shopos/shopos/index.php?action=buy_now&BUYproducts_id=73&cat=2"><img src="http://shopos/shopos/themes/cleanshop/buttons/ru/button_buy_now.gif" alt="Купить 'HP 2133'" title=" Купить 'HP 2133' " /></a> => <a href="http://shopos/shopos/index.php?action=buy_now&BUYproducts_id=73&cat=2"><img src="http://shopos/shopos/themes/cleanshop/buttons/ru/cart_big.gif" alt="" /></a> => 3-4 дня => => => => => => 0 ) Array ( => HP PAVILION dv5-1040er => => 0 => => 80 => => http://shopos/shopos/images/product_images/thumbnail_images/../noimage.gif => http://shopos/shopos/product_info.php?products_id=80 => 19.000,0 руб. => 19000 => => +<a href="http://shopos/shopos/popup_content.php?coID=1" target="_blank" onclick="window.open('http://shopos/shopos/popup_content.php?coID=1', 'popUp', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=395,height=320'); return false;">доставка</a> => <a href="http://shopos/shopos/index.php?action=buy_now&BUYproducts_id=80&cat=2"><img src="http://shopos/shopos/themes/cleanshop/buttons/ru/button_buy_now.gif" alt="Купить 'HP PAVILION dv5-1040er'" title=" Купить 'HP PAVILION dv5-1040er' " /></a> => <a href="http://shopos/shopos/index.php?action=buy_now&BUYproducts_id=80&cat=2"><img src="http://shopos/shopos/themes/cleanshop/buttons/ru/cart_big.gif" alt="" /></a> => 3-4 дня => => => => => Core 2 Duo 2000Mhz/15.4"/2048Mb/250.0Gb/DVD-RW => 0 ) Array ( => HP 550 => => 0 => => 71 => => http://shopos/shopos/images/product_images/thumbnail_images/../noimage.gif => http://shopos/shopos/product_info.php?products_id=71 => 20.000,0 руб. => 20000 => => +<a href="http://shopos/shopos/popup_content.php?coID=1" target="_blank" onclick="window.open('http://shopos/shopos/popup_content.php?coID=1', 'popUp', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=395,height=320'); return false;">доставка</a> => <a href="http://shopos/shopos/index.php?action=buy_now&BUYproducts_id=71&cat=2"><img src="http://shopos/shopos/themes/cleanshop/buttons/ru/button_buy_now.gif" alt="Купить 'HP 550'" title=" Купить 'HP 550' " /></a> => <a href="http://shopos/shopos/index.php?action=buy_now&BUYproducts_id=71&cat=2"><img src="http://shopos/shopos/themes/cleanshop/buttons/ru/cart_big.gif" alt="" /></a> => 3-4 дня => => => => => => 0 ) Array ( => HP 6730s => => 0 => => 78 => => http://shopos/shopos/images/product_images/thumbnail_images/../noimage.gif => http://shopos/shopos/product_info.php?products_id=78 => 37.800,0 руб. => 37800 => => +<a href="http://shopos/shopos/popup_content.php?coID=1" target="_blank" onclick="window.open('http://shopos/shopos/popup_content.php?coID=1', 'popUp', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=395,height=320'); return false;">доставка</a> => <a href="http://shopos/shopos/index.php?action=buy_now&BUYproducts_id=78&cat=2"><img src="http://shopos/shopos/themes/cleanshop/buttons/ru/button_buy_now.gif" alt="Купить 'HP 6730s'" title=" Купить 'HP 6730s' " /></a> => <a href="http://shopos/shopos/index.php?action=buy_now&BUYproducts_id=78&cat=2"><img src="http://shopos/shopos/themes/cleanshop/buttons/ru/cart_big.gif" alt="" /></a> => 3-4 дня => => => => => => 0 ) p.s. шаблон нужно подправить. чтобы метка с именем товара не выводилась во всяких alt. p.s. {$module_data.PRODUCTS_SHORT_DESCRIPTION|os_truncate:200} нужно резать не в шаблоне, а в php. иначе добавить нельзя будет ничего после краткого описания с помощью фильтров. все обрежется чтобы работало на более старых версиях заменить modules\product_listing.php на прикрепленный 8. Работа с кнопками <?php /* Plugin Name: Buttons Plugin URI: http://www.shopos.ru/ Version: 1.0 Author: Матецкий Евгений Author URI: http://www.shopos.ru/ */ /* нельзя изменить кнопки print.gif icon_arrow2.gif button_quick_find.gif button_ask_a_question.gif button_add_quick.gif */ add_filter('button_write', 'button_write_filter'); add_filter('button_view', 'button_view_filter'); add_filter('button_download', 'button_download_filter'); add_filter('button_checkout', 'button_checkout_filter'); add_filter('button_add_address', 'button_add_address_filter'); add_filter('button_continue', 'button_continue_filter'); add_filter('button_login', 'button_login_filter'); add_filter('button_update_cart', 'button_update_cart_filter'); add_filter('button_update', 'button_update_filter'); add_filter('button_redeem', 'button_redeem_filter'); add_filter('button_send', 'button_send_filter'); add_filter('button_admin', 'button_admin_filter'); add_filter('button_change_address', 'button_change_address_filter'); add_filter('button_search', 'button_search_filter'); add_filter('button_print_schet', 'button_print_schet_filter'); add_filter('button_print_kvitancia', 'button_print_kvitancia_filter'); add_filter('button_in_cart', 'button_in_cart_filter'); add_filter('button_print', 'button_print_filter'); add_filter('button_affiliate_banners', 'button_affiliate_banners_filter'); add_filter('button_affiliate_sales', 'button_affiliate_sales_filter'); add_filter('button_affiliate_clickthroughs', 'button_affiliate_clickthroughs_filter'); add_filter('button_confirm_order', 'button_confirm_order_filter'); add_filter('button_cart_big', 'button_cart_big_filter'); add_filter('button_login_small', 'button_login_small_filter'); add_filter('button_small_view', 'button_small_view_filter'); add_filter('button_small_edit', 'button_small_edit_filter'); add_filter('button_small_delete', 'button_small_delete_filter'); add_filter('button_edit_product', 'button_edit_product_filter'); add_filter('button_buy_now', 'button_buy_now_filter'); add_filter('button_edit_article', 'button_edit_article_filter'); add_filter('button_back', 'button_back_filter'); add_filter('button_delete', 'button_delete_filter'); /* //кнопка $_array = array('img' => 'button_download.gif', 'href' => os_href_link('media/products/'.$content_data['content_file']), 'alt' => TEXT_DOWNLOAD, 'code' => '' ); $_array = apply_filter('button_download', $_array); if (empty($_array['code'])) { $_array['code'] = '<a href="'.$_array['href'].'">'.os_image_button($_array['img'], $_array['alt']).'</a>'; } $button = $_array['code']; */ //кнопка button_write_review.gif. Добавить отзыв function button_write_filter($_value) { return $_value; } //button_view.gif Отзыв function button_view_filter($_value) { return $_value; } //button_download.gif Загрузить function button_download_filter($_value) { return $_value; } //button_checkout.gif / Оформить function button_checkout_filter($_value) { return $_value; } //button_add_address.gif / Добавить отзыв function button_add_address_filter($_value) { $_value['img'] = 'small_delete.gif'; return $_value; } //button_continue.gif / Продолжить function button_continue_filter($_value) { //$_value['code'] = 'ddd'; return $_value; } //button_login.gif / Продолжить function button_login_filter($_value) { return $_value; } //button_update_cart/ Обновить function button_update_cart_filter($_value) { //$_value['img'] = 'button_search.gif'; return $_value; } //button_update.gif/ Обновить function button_update_filter($_value) { // $_value['img'] = 'button_search.gif'; return $_value; } //button_redeem.gif/ использовать function button_redeem_filter($_value) { return $_value; } //button_send.gif/ Отправить function button_send_filter($_value) { return $_value; } //button_admin.gif/ Админка function button_admin_filter($_value) { $_value['code'] = 'dddd'; return $_value; } //button_change_address.gif/ Изменить function button_change_address_filter($_value) { $_value['code'] = 'dddd'; // print_r($_value); return $_value; } //button_search.gif/ Поиск function button_search_filter($_value) { //$_value['code'] = 'Поиск'; // print_r($_value); return $_value; } //button_print_schet.gif счет function button_print_schet_filter($_value) { //$_value['code'] = 'Поиск'; // print_r($_value); return $_value; } //button_print_kvitancia.gif квитанция function button_print_kvitancia_filter($_value) { //$_value['code'] = 'Поиск'; // print_r($_value); return $_value; } //button_in_cart.gif в корзину function button_in_cart_filter($_value) { return $_value; } //button_print.gif Рапечатать function button_print_filter($_value) { $_value['code'] = '<a href="'.$_value['href'].'">print</a>'; return $_value; } //button_affiliate_banners.gif Баннеры function button_affiliate_banners_filter($_value) { $_value['code'] = 'ddd'; return $_value; } //button_affiliate_sales.gif Продажи function button_affiliate_sales_filter($_value) { return $_value; } //button_affiliate_clickthroughs.gif Клики function button_affiliate_clickthroughs_filter($_value) { return $_value; } //button_confirm_order.gif Клики function button_confirm_order_filter($_value) { return $_value; } //cart_big.gif купить function button_cart_big_filter($_value) { return $_value; } //button_login_small.gif купить function button_login_small_filter($_value) { return $_value; } //small_view.gif смотреть function button_small_view_filter($_value) { // $_value['code'] = 'see!'; return $_value; } //small_edit.gif Редактировать function button_small_edit_filter($_value) { //$_value['code'] = 'Редактировать'; return $_value; } //small_delete.gif Удалить function button_small_delete_filter($_value) { // $_value['code'] = 'Удалить'; return $_value; } //edit_product Изменить function button_edit_product_filter($_value) { $_value['code'] = '<font color="red">edit</font>'; return $_value; } //button_buy_now купить function button_buy_now_filter($_value) { $_value['code'] = '<font color="red">купить</font>'; return $_value; } //edit_article.gif Редактировать function button_edit_article_filter($_value) { $_value['code'] = '<font color="red">Редактировать</font>'; return $_value; } //button_back.gif Назад function button_back_filter($_value) { $_value['code'] = '<font color="red">Назад</font>'; return $_value; } //button_delete.gif Удалить function button_delete_filter($_value) { $_value['code'] = '<font color="red">Удалить</font>'; return $_value; } ?> 9. Работа с метками в шаблоне = 'banner'; return $array; } ?> после включения плагина метка {$banner} будет доступна во всех *.html шаблонах .... 10. Замена кнопок Купить на текст <?php /* Plugin Name: Замена кнопки Купить Description: Плагин убирает картинку и заменяет ее текстом Version: 1.0 */ add_filter('button_cart_big', 'button_buy_now_plug_filter'); function button_buy_now_plug_filter($_value) { $_value['code'] = '<a href="'.$_value['href'].'" title="'.IMAGE_BUTTON_IN_CART.'">'.ICON_CART.'</a>'; return $_value; } ?> Собственно, <a href="'.$_value['href'].'" title="'.IMAGE_BUTTON_IN_CART.'">'.ICON_CART.'</a> и есть ссылка с титлом и т.д.. Тексты тянутся из языкового файла langs\язык\lang.php. т.е. используются тексты которые там уже есть. В файле класса товара includes\classes\product.php есть два метода(функции, кому как) function getBuyNowButton и function getBuyNowButtonNew каждая кнопка собирается из массива, на который повешен фильтр в данном случае на первую $_array = apply_filter('button_buy_now', $_array); на вторую $_array = apply_filter('button_cart_big', $_array); Через плагин мы получаем массив кнопок в $_value, а из нее уже можно вытащить что там есть. Нам нужна была только ссылка, соответствено, $_value['href'] Можно заменять сразу две кнопки <?php /* Plugin Name: Замена кнопки Купить Description: Плагин убирает картинку и заменяет ее текстом Version: 1.0 */ add_filter('button_cart_big', 'button_cart_big_plug_filter'); add_filter('button_buy_now', 'button_buy_now_plug_filter'); function button_cart_big_plug_filter($_value) { $_value['code'] = '<a href="'.$_value['href'].'" title="'.IMAGE_BUTTON_IN_CART.'">'.ICON_CART.'</a>'; return $_value; } function button_buy_now_plug_filter($_value) { $_value['code'] = '<a href="'.$_value['href'].'" title="'.IMAGE_BUTTON_IN_CART.'">'.ICON_CART.'</a>'; return $_value; } ?> вроде все. у меня работает. |
|