Категории |
ПлагиныПример плагина для создания простого блока Вот это отлично! Огромное спасибо. 1. Как можно убрать ограничение на объем вводимой информации через этот плагин? а то если вношу туда код подлинее он урезается. <?php echo "HI"; ?> 1. Как можно убрать ограничение на объем вводимой информации через этот плагин? а то если вношу туда код подлинее он урезается. 2. Евгений приведите пример как сделать плагин в котором надо просто подключить один файл со скриптом на пхп, имя подключаемого файла например start.php с кодом <?php echo "HI"; ?> 1. что то не сильно понимаю о чем речь? где и какие ограничения? кол. символов вводимых в textarea и input text? 2. а на каком этапе нужно выполнить это подключаемый код? 1. Да количество символов, просто хотел в блоке разместить счётчики (майл, ливинтернет и т.д.) но в блоке отображается не всё, т.к. большая часть вносимого кода не сохраняется (урезается) когда вношу его в админке и нажимаю сохранить. Тоже самое как в первом примере Евгений, почему то данный блок ничего не выводит. <?php echo "HI"; ?> В результате получаю следующее - см. скрин. Что не так? строчку $array = get_option('uni_content'); нужно убрать это у меня была ошибка :) 1. Евгений подскажите сделал плагин опросов на основе плагина из первого поста, но в админке данного плагина в некоторых местах так и пишет его первоначальное название - uni, где это правится так и не нашёл? в файле modules\plugins\uni\uni.php 2. Уже задавал этот вопрос, но не было ответа, при выполнении скрипта происходит переброс на чистый лист на странице /redirector.php, но это происходит не всегда, если человек голосует например находясь на странице карточки товара, то голос отсылается и отображается результат, т.е. сама система шопоса где-то ставит препятствие для выполнения скрипта файлом redirector.php, именно происходит выполнение через redirector.php с главной страницы (пример формируемой ссылки с главной страницы - http://www.elektra-vent.ru/redirector.php?action=results&poll_ident=5) и скрипт не выполняется, а когда мы находимся в карточке товара ссылка формируется - http://www.elektra-vent.ru/manager.php?action=results&poll_ident=5 и скрипт выполняется, почему где-то работает а где-то нет? Можно ли и на главной странице отдавать работу скрипта через manager.php? os_redirect('index.php'); редирект может сработать только до вывода какого либо контента. если контент уже выведен - тогда переадрессацию нужно делать с помошью js смотрите как это сделано в модуле vote function page_vote () { if (isset($_POST) && is_numeric($_POST)) { if (!isset($_SESSION)) { $vote_value = get_option('vote_values'); $vote_array = explode("\n", $vote_value); $vote_result = get_option('vote_result'); $vote_result = explode(";", $vote_result); $vote_cole = count($vote_array); //если кол. вариантов ответов не соответствует с результатами - обнуляются результаты. if (count($vote_array) != count($vote_result)) { unset($vote_result); foreach ($vote_array as $_n=>$_m) { $vote_result = 0; } } $_POST--; if ($_POST >= 0 && ($_POST<=$vote_cole)) { $vote_result]++; } $vote_result = implode(';', $vote_result); update_option ('vote_result', $vote_result); $_SESSION = '1'; os_redirect(os_href_link('index.php')); //echo 'Голос учтен<br>'; } else { os_redirect(os_href_link('index.php')); //echo 'Голос не учтен. Вы уже голосовали.'; } } } так же не сложно добавить и страницу с результатом голосования. Я бы дорабатывал если бы в этом хорошо разбирался, а так приходится прикручивать готовый скрипт. И как использовать os_redirect('index.php'); тоже не совсем понимаю.
Евгений, а как сделать так, чтобы было несколько полей и если некоторые поля не заполнены, то их и не выводить в шаблоне совсем? add_option('uni_content', 'Заголовок блока 1', 'input'); add_option('uni_content', 'Содержимое блока 1', 'textarea'); add_option('uni_content', 'Заголовок блока 2', 'input'); add_option('uni_content', 'Содержимое блока 2', 'textarea'); add_option('uni_content', 'Заголовок блока 3', 'input'); add_option('uni_content', 'Содержимое блока 3', 'textarea'); 1. названия у разных опций не может быть одинаковым. (речь идет о uni_content) Огромное спасибо! Еще вопрос. жуткий костыль return array('title' => $title, 'content' =>$_box_value); <?php /* Plugin Name: Uni Box Plugin URI: http://www.shopos.ru/ Version: 1.0.0 */ defined('_VALID_OS') or die('Direct Access to this location is not allowed.'); add_action ('box', 'uni_box'); //пример добавления блока function uni_box() { $title = 'Универсальный блок'; $option1 = get_option('uni_box_text_1'); $option2 = get_option('uni_box_text_2'); $option3 = get_option('uni_box_text_3'); $option4 = get_option('uni_box_text_4'); $option5 = get_option('uni_box_text_5'); $option6 = get_option('uni_box_text_6'); $content = ''; global $osTemplate; global $default; $default->template_dir = plugdir(); $default->assign('tpl_path', _HTTP_THEMES_C); $default->assign('option1', $option1); $default->assign('option2', $option2); $default->assign('option3', $option3); $default->assign('option4', $option4); $default->assign('option5', $option5); $_box_value = $default->fetch('uni_box.html'); $osTemplate->assign('uni_box', $_box_value); $default->template_dir = _THEMES; return array('title' => $title, 'content' =>$_box_value); } function uni_box_install () { add_option('uni_box_text_1', ''); add_option('uni_box_text_2', 'т'); add_option('uni_box_text_3', 'тест'); add_option('uni_box_text_4', 'текст'); add_option('uni_box_text_5', 'текст'); } ?> что-то не сработал у меня этот блок. не выводит его на сайте. if (!empty($option1)) $content .= '<b>опция 1</b> '.$option1.'<br>'; на $option1 = get_option('uni_box_text_1'); и не выводит содержимое. только заголовок. как я понял и проверки не будет в этом случае, если поле пустое. что-то не сработал у меня этот блок. не выводит его на сайте. заменил if (!empty($option1)) $content .= '<b>опция 1</b> '.$option1.'<br>'; на $option1 = get_option('uni_box_text_1'); и не выводит содержимое. только заголовок. как я понял и проверки не будет в этом случае, если поле пустое. это уже в шаблоне нужно проверять - пустая ли метка. что-то не сработал у меня этот блок. не выводит его на сайте. сейчас поковыряюсь еще немного О. Заработало. Может кэш? Хотя все выключено. А как можно подрубить JS и CSS файлы через плагин? <script type="text/javascript" src="jscript/jscript_ajax.js"></script> А как можно подрубить JS и CSS файлы через плагин? Я видел в плагине метатегов _e('........'); Но оно выводит прям под <title>. Ниже нельзя опустить? Хотя бы под <script type="text/javascript" src="jscript/jscript_ajax.js"></script> нет, пока что нет такой возможности а есть большая разница где между тегами <head></head> будет подключаться js? css понятно - могут перекрываться. но это кривые стили, если они пересекаются просто к примеру некоторые плагины jquery упорно не пашут если сама библиотека ниже подключается чем плагин для нее. или конфликт со скриптами шопоса. или может как-то позицианирование задавать? А как можно вынести проверку включения нескольких полей в шаблоне? $option10 = get_option('text_10'); $option11 = get_option('text_11'); $option12 = get_option('text_12'); и еще одна $option20 = get_option('text_20'); $option21 = get_option('text_21'); $option22 = get_option('text_22'); Т.е. каждая группа выводит свое. по три поля в шаблоне. Как сделать проверку именно для группы? Полное то понятно, if (get_option('трампаппам')=='true') { } а вот как только для нескольких полей, но в шаблоне, чтобы стили стили которые будут в шаблоне, не показываись. Что-то метод тыка перестал работать ;D содержимое папки meta - закинуть в корень магазина (2 файла). $default->assign('option2', $option2); Т.е. каждая группа выводит свое. по три поля в шаблоне. Как сделать проверку именно для группы? конкретнее что там за данные? и что вообще за задача стоит? $default->assign('option2', $option2); вот этой строчкой мы создаем метку в шаблоне {$option2} а в шаблоне uni_box.html {if option2} {option2} {/if} Это понятно. У меня 9 полей. Это три группы. Кажда группа имеет: URL, картинку, описание. Можно конечно сделать {if option2 or option3...}....{/if}, но это не подходит, т.к. могут одно поле заполнить и будет два пустых поля и одно заполненок, а так не нужно. $default->assign('option2', $option2); вот этой строчкой мы создаем метку в шаблоне {$option2} а в шаблоне uni_box.html {if option2} {option2} {/if} Это понятно. У меня 9 полей. Это три группы. Кажда группа имеет: URL, картинку, описание. Можно конечно сделать {if option2 or option3...}....{/if}, но это не подходит, т.к. могут одно поле заполнить и будет два пустых поля и одно заполненок, а так не нужно. ну так а что мешает сделать так {if option1 && option2 && option3} {/if} http://www.smarty.net/manual/ru/language.function.if.php Точно. Спасибо. Я просто до IF еще там не добрался) будут Замечательно! Еще столкнулся с тем, что если в полях плагина где-то указан ' (красным выделено) ок. поправлю готово Отлично. Отлично. Евгений, а как быть с add_action ('head', 'box_трам'); (через два поста вверх) может можно в head подключать как-то еще? что то сути проблемы не понимаю add_action ('head', 'название_функции_1'); function название_функции_1() { _e('метатег'); или echo ('метатег'."\n"); } add_action ('box', 'название_функции_2'); function название_функции_2() { return array('title' => $title, 'content' =>$content); } функции разные для создания блока и создания записи в теге <head> одно без другого вполне работает с названиями функций или action что то напутали Есть два "акшона(?)" add_action ('box', 'box_трам'); add_action ('head', 'box_трам'); Если я акшон head изменю на любое другое, то перестает подцеплятся шаблон бокса и выводится дефолтный. да хоть 20 для каждого action свое уникальное имя и своя функция У меня почему вырубается шаблон uni_box.html, если acrion head имеет название отличное от action box. то что не работает - сюда скидываем. Сделал пару мелки плагинов. Просто подрубает библиотеку Jquery в шаблон на странице с описанием товара и так подключается Jquery получается с плагином - будет 2 раза подключаться? плагин, которые вчера отправлял - еще не исправлял. времени не было за плагины спасибо :) на странице с описанием товара и так подключается Jquery получается с плагином - будет 2 раза подключаться? хы. пупанул я) мне просто на всех страницах он нужен. я по этому и сделал в виде плагина. за плагины спасибо ну эт даже не пагины получились))))) так, на что хватило)) вот когда тот доделаю, что выслал, то будет немного посложнее чем эти) У меня почему-то плагины vote, uni и даже 2ip появляются с синими полосами сверху и снизу от самого текста. Шаблон не дефолтный. Не вообще не пойму откуда он такое офрмление взял! Можете подсказать? из файла themes/шаблон/boxes/box.html для default шаблона он выглядит так Да, он не обновился почему-то!)))
в папке с плагинами создать файл например jquery.php или папку jquery и в ней файл jquery.php (без разнциы) Как можно через плагин создать страницу с полным оформлением сайта? Думаю вот это Так не получилось пока. Ошибки лезут всякие. Call to a member function assign() on a non-object in Y:\html\shopos\includes\header.php on line 247 это просто, если добавить хедер и футер. Вот мод требует наличия такого кода в /includes/top.php $contents_settings_query = os_db_query('select contents_key, wert as contents_wert from contents_settings'); while ($contents_settings = os_db_fetch_array($contents_settings_query)) { define(strtoupper($contents_settings['contents_key']), $contents_settings['contents_wert']); } А мне надо в плагине. Через файлы плагина как-то можно указать? ); } А мне надо в плагине. Через файлы плагина как-то можно указать? а в какой момент эти данные нужно получать? можно в самом плагины и делать этот запрос. в чем проблема Что-то не получается отобразить правильно блок вот такая штука: Нашел не приятный баг. В плагинах языковые ресурсы определяются через массив = 'Показывать свои метатеги'; в отличие от модулей define('MODULE_SHIPPING_FREEAMOUNT_TEXT_TITLE', 'Бесплатная доставка'); define('MODULE_SHIPPING_FREEAMOUNT_TEXT_DESCRIPTION', 'Модуль бесплатной доставки'); Не в этом ошибка? Нашел не приятный баг. Если плагин лежит в папке с шаблоном, то не подхватывается текстовик ru.php. И все добавленные настройки и т д... получаются без описания! Я блин час бился, не мог понять че за фигня))) сейчас подправлю. исправлено Ни как не могу понять как через плагин выводить что-то в main_content со всем оформление сайта. Тут сегодня плагинами крутил, есть плагины например стандартные которые нужно переделать под шаблон Тут сегодня плагинами крутил, есть плагины например стандартные которые нужно переделать под шаблон но когда плагин есть и в основе и шаблоне тогда возникает ошибка, предлагаю зделать чтобы плагины из шаблона имели приоритете перед плагинами основы тоесть если с таким же именем плагин существует в шаблоне то просто тот, который в в магазине не подключать. а если подключен - удалять? а если пытаемся установить плагин в магазине, а такой существует в шаблоне? в шаблоне отключать, а в магазине включать? не сложно. до следующей версии сделаю Ни как не могу понять как через плагин выводить что-то в main_content со всем оформление сайта. Т.е. страница будет вызываться по index.php?page=my_plugin_page Подскажите плиз, а то несколько плагинов валяются из-за этого без дела(( А именно: каталог ссылок, галерея, чат и возможно мини форум... Это страница без оформления. add_action('page', 'tratata'); function tratata() { } пример xml карта сайта /index.php?page=xml_sitemap а вывод в центр страницы. с оформлением вот так: через main_page add_action('main_page', 'tratata2'); function tratata2() { } естественно редирект работать в main_page не будет. поэтому его нужно через page делать если не устраивает вывод как в main_page делаем вот как то так add_action('page', 'tratata'); function tratata() { global $osTemplate; $module_content = 'содержимое_блока'; $osTemplate->assign('language', $_SESSION['language']); $osTemplate->caching = 0; $osTemplate->assign('module_content', $module_content); $main_content = $osTemplate->fetch(CURRENT_TEMPLATE.'/module/ваш_шаблон_для вывода.html'); $osTemplate->assign('main_content', $main_content); $osTemplate->assign('language', $_SESSION['language']); $osTemplate->caching = 0; $template = (file_exists(_THEMES_C.FILENAME_ARTICLES.'.html') ? CURRENT_TEMPLATE.'/'.FILENAME_ARTICLES.'.html' : CURRENT_TEMPLATE.'/index.html'); $osTemplate->display($template); } Жень, спасибо. Уже на шаг ближе к истине)) а если подключить header.php require(dir_path('includes') . 'header.php'); ? ошибка ок. сейчас посмотрю как это реализовать ошибка Fatal error: Call to a member function trail() on a non-object in Y:\html\shopos\td\includes\header.php on line 246 Я уже пробовал. Но подгружает CSS стили т .д... <?php add_action('page', 'page_2'); function page_2() { global $osTemplate; global $breadcrumb; require(dir_path('includes') . 'header.php'); echo 'текст'; require(dir_path('includes') . 'bottom.php'); } ?> Во! Работает. Жень, как-то можно еще сделать breadcrumb? Жень, как-то можно еще сделать breadcrumb? нашел в доках breadcrumb_add, как пользоваться? Можно примерчик? класс \includes\classes\breadcrumb.php нужно смотреть вот пример работы с ним <?php add_action('page', 'page_2'); function page_2() { global $osTemplate; global $breadcrumb; require(dir_path('includes') . 'header.php'); $breadcrumb->add('тратата1', 'http://tra1.ru'); $breadcrumb->add('тратата2', 'http://tra2.ru'); $breadcrumb->add('тратата3', 'http://tra3.ru'); echo $breadcrumb->trail(' > '); // require(dir_path('includes') . 'bottom.php'); } ?> Во! Работает. правда bottom.php почему-то не пашет. т.е. не добавляет </body></html> и копирайт. там нужно $osTemplate->load_filter('output', 'trimhitespace'); добавлять но без использования шаблона - выдает какую то ошибку Спасибо. Нормально теперь. Теперь вообще все ровно! function links () { function links_title($value) { $value = 'Ссылки - '.$value; return $value; } function links_head() { _e('<link rel="stylesheet" href="'.plugurl().'css/links.css" />'); } global $osTemplate; global $breadcrumb; require(dir_path('includes') . 'header.php'); require(dirname(__FILE__).'/index.php'); require(dir_path('includes') . 'bottom.php'); } Просто если так не сделать, то title выводит на всех страницах, так же как и CSS файл подключается везде. Спасибо, выводится. Правда не там где надо) Ничего, что у меня функция в функции? на старых версиях php такое походу работать не будет хм. а как тогда сделать можно? Спасибо, выводится. Правда не там где надо) У меня breadcrumb выводится после <body> почему-то. Как-то можно зацепить на {$navtrail}? ну например: $osTemplate->assign('navtrail', $breadcrumb->trail(' » ')); Ага. Теперь как надо. Спасибо! хм. а как тогда сделать можно? пока никак is_page() но она пока слабовата) Да. Пробовал с is_page, но ничего не вышло. Жень. Еще знаешь что не помешало бы. Чтобы через плагин можно было что-то выводить в карточках товаров или лучше вообще глобально выводить, чтобы можно было использовать везде. Как например плагины для smarty, то, что я тут постил. Через них вывод идет во все списки товаров. Т.е. чтобы не пихать стандартные метки для вывода, а сделать так, чтобы самому задавать в плагине. В смарти пайп (|) имеет свой смысл передачи аргумента в функцию: {$module_data.NEWS_CONTENT|os_truncate:$smarty.const.MAX_DISPLAY_LATEST_NEWS_CONTENT:" ..."} Если $plugin у вас массив, то поле обозначается, как в примере выше, - $module_data.NEWS_CONTENT, стало быть корректный формат что-то типа {$plugin_myplugin.text}. Только я не понимаю, зачем всё это, если хуки (называемые тут фильтрами) и так позволяют делать это гибче. Я (|) привел для примера) Понятно, что надо делать иначе. Подскажите еще вот такую штуку. function content_title($value) { $value = $content_data['title'].$value; return $value; } Но заголовок пуст почему-то всегда. Делаю естественно уже после получения данных из БД такой заголовок пашет норм. function content_title($value) { $value = 'Заголовок'.$value; return $value; } Подскажите плиз нубу как правильно сделать) И еще вопрос. думаю ошибка в запросе к БД, или то поле в базе пустое Нет. Тут другое. не совсем понял твой вопрос ты не можеш вывести страницу Я НЕ об этом, совсем! Я в #90 посте написал. править преимущественно надо manager.php и redirector.php. Жаль, что надо будет править файлы движка. специфику пока не очень уловил, но может тебе и использовать в плагине обычные инфо страницы? Да ни чем. тоже самое, что и инфо страницы. Только добавлено более блоков для вывода. Там в принципе можно и с обычными инфостраницами скрестить данный плагин, но я решил покопаться, как и что....)) ежели хочется чтобы отдельно от инф страниц было, тогда думаю без правок указанных выше файлов не обойтись. А если привязать в инф. страницам, тогда можно просто из плагина их создавать и отмечать в базе, какие ID-шники "принадлежат" данному плагину. |
|