Категории

[FAQ] Часто задаваемые вопросы и ответы

Проблемы и решения

Ошибки и исправления

Общие вопросы

Расширения

Установка и обновление

Модули

Шаблоны

Локализация интерфейса

Коммерческие предложения

Учимся бизнесу

Бизнес книги

Поисковая оптимизация (SEO)

Магазины на ShopOS

Хостинг для ShopOS

Предложения и пожелания

Курилка

Плагины

Пример плагина для создания простого блока

add_action('box', 'box_uni'); // привязываем функцию box_abcd, как функцию для создания блока.

function box_uni()
{
    $title =  get_option('uni_title'); // получение значения опций uni_title и uni_content, созданных при установке плагина
    $content = get_option('uni_content');
 
    return array('title' => $title, 'content' =>$content); //возвращаем массив для создания блока заголовок и содержимое блока.
//если функция ничего не возвращает - блок не будет создан
}
/*
так же функцию можно переписать так

function box_abcd()
{
    $array =  get_option('uni_title');
    $array = get_option('uni_content');
 
    return $array;
}

может так для кого то проще.
*/


function uni_install () //запускается только при установке плагина . имя функции может иметь название только название_плагины_install ()
{
    add_option('uni_title', 'Заголовок блока'); //создание опции. если не указан 3ий параметр - создается <input type="text" > . тоесть просто поле для ввода
    add_option('uni_content', 'Содержимое блока', 'textarea'); //создание 2ой опция. но уже textarea
/*
  для тех, кто не знает
  Поле <TEXTAREA> представляет собой элемент формы для создания области, в которую можно вводить несколько строк текста
  http://www.htmlbook.ru/html/textarea.html
  */
 
/*
    uni_title и uni_content - любые уникальные имена опций плагинов.
если названия опций uni_title и uni_content встречаются в других плагинах - получить правильно значение этой опции не получится.

так что названия опции лучше задавать так:
  название_плагина_любое_ключевое_слово. uni - название плагина. title - заголовок
естественно это только рекомендация. название опции можно указать хоть sdfkjsdfkjdshfkh_ 
    */
}

/* добавляем метку {$box_uni} в шаблон - и видим результат работы*/

то, что получилось смотрим на скриншотах


Вот это отлично! Огромное спасибо.


1. Как можно убрать ограничение на объем вводимой информации через этот плагин? а то если вношу туда код подлинее он урезается.
2. Евгений приведите пример как сделать плагин в котором надо просто подключить один файл со скриптом на пхп, имя подключаемого файла например start.php с кодом

<?php
echo "HI";
?>



1. Как можно убрать ограничение на объем вводимой информации через этот плагин? а то если вношу туда код подлинее он урезается.
2. Евгений приведите пример как сделать плагин в котором надо просто подключить один файл со скриптом на пхп, имя подключаемого файла например start.php с кодом

<?php
echo "HI";
?>



1. что то не сильно понимаю о чем речь?

где и какие ограничения?  кол. символов вводимых в textarea и input text?

2. а на каком этапе нужно выполнить это подключаемый код?


1. Да количество символов, просто хотел в блоке разместить счётчики (майл, ливинтернет и т.д.) но в блоке отображается не всё, т.к. большая часть вносимого кода  не сохраняется (урезается) когда вношу его в админке и нажимаю сохранить.
2. "2. а на каком этапе нужно выполнить это подключаемый код?" я не знаю, надо просто чтобы в блоке в итоге писалось - "HI", я понимаю что можно просто написать, но интересует именно метод подключения файла start.php в блоке, этап когда пользователь открыл страницу и увидел в блоке "HI" не знаю что имеется под этапом.


Тоже самое как в первом примере

но функцию function box_abcd()
{
   $array =  get_option('uni_title');
   $array = get_option('uni_content');
 
    return $array;
}

заменить на

function box_abcd()
{
    ob_start();
   include(dirname(__FILE__).'/start.php'); /* подключение файла start.php из папки с плагином*/
   $array = ob_get_contents();
   ob_end_clean();

   $array =  get_option('uni_title');
 
    return $array;
}


Евгений, почему то данный блок ничего не выводит.
Код в файле uni.php следующий:
<?php
/*
Plugin Name: Uni
Plugin URI: http://www.shopos.ru/
Version: 1.0.0
Author: Матецкий Евгений
Author URI: http://www.shopos.ru/
*/

add_action('box', 'box_uni');

function box_uni()
{
    ob_start();
    include(dirname(__FILE__).'/start.php'); /* подключение файла start.php из папки с плагином*/
    $array = ob_get_contents();
    ob_end_clean();

    $array =  get_option('uni_title');
    $array = get_option('uni_content');
 
    return $array;
}

function uni_install ()
{
    add_option('uni_title', 'Заголовок блока');

}
?>

Код в файле start.php который находится в plugins/uni/ следующий:

<?php
echo "HI";
?>


В результате получаю следующее - см. скрин.
Что не так?


строчку  $array = get_option('uni_content'); нужно убрать

опции такой же нет вообще uni_content


это у меня была ошибка :)


1. Евгений подскажите сделал плагин опросов на основе плагина из первого поста, но в админке данного плагина в некоторых местах так и пишет его первоначальное название - uni, где это правится так и не нашёл?
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?
Прикрепил сам плагин голосования, если есть время взгляните.
Доступ в админку admin / admin


в файле modules\plugins\uni\uni.php

/*
Plugin Name: Uni
Plugin URI: http://www.shopos.ru/
Version: 1.0.0
Author: Матецкий Евгений
Author URI: http://www.shopos.ru/
*/


заменить

на

/*
Plugin Name: название плагина
Plugin URI: http://www.shopos.ru/
Version: 1.0.0
*/


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?
Прикрепил сам плагин голосования, если есть время взгляните.
Доступ в админку admin / admin

так а зачем с 0я писать опросник

дорабатывайте тот, что уже создан

vote

что то не видел такого вопроса на форуме.

есть же функция для редиректа


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'); тоже не совсем понимаю.


Выкладываю 2 простеньких плагина - 1. Праздники сегодня 2. Статистика (счётчики mail и т.д.)
В папке каждого из плагинов есть файл index.php туда и заносите данные, если нужны праздники то заходите на сайт http://www.calend.ru/ там копируете код под нужные Вам праздники и заменяете имеющийся в index.php, также в плагине Статистика в index.php вставляете свои счётчики вместо слов "Ваши счётчики".
И соответственно добавляете метки в свой шаблон {$box_statistic} и {$box_prasdnik}
Как это выглядит посмотреть можно у меня на сайте.



Я бы дорабатывал если бы в этом хорошо разбирался, а так приходится прикручивать готовый скрипт. И как использовать os_redirect('index.php'); тоже не совсем понимаю.


Выкладываю 2 простеньких плагина - 1. Праздники сегодня 2. Статистика (счётчики mail и т.д.)
В папке каждого из плагинов есть файл index.php туда и заносите данные, если нужны праздники то заходите на сайт http://www.calend.ru/ там копируете код под нужные Вам праздники и заменяете имеющийся в index.php, также в плагине Статистика в index.php вставляете свои счётчики вместо слов "Ваши счётчики".
И соответственно добавляете метки в свой шаблон {$box_statistic} и {$box_prasdnik}
Как это выглядит посмотреть можно у меня на сайте.


А можно в 2.4.5 установаить эти плагины




Я бы дорабатывал если бы в этом хорошо разбирался, а так приходится прикручивать готовый скрипт. И как использовать os_redirect('index.php'); тоже не совсем понимаю.


Выкладываю 2 простеньких плагина - 1. Праздники сегодня 2. Статистика (счётчики mail и т.д.)
В папке каждого из плагинов есть файл index.php туда и заносите данные, если нужны праздники то заходите на сайт http://www.calend.ru/ там копируете код под нужные Вам праздники и заменяете имеющийся в index.php, также в плагине Статистика в index.php вставляете свои счётчики вместо слов "Ваши счётчики".
И соответственно добавляете метки в свой шаблон {$box_statistic} и {$box_prasdnik}
Как это выглядит посмотреть можно у меня на сайте.


А можно в 2.4.5 установаить эти плагины


нет.

много кода дописано

только через обновление


Евгений, а как сделать так, чтобы было несколько полей и если некоторые поля не заполнены, то их и не выводить в шаблоне совсем?

Например есть несколько полей

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)

2. пример прикреплен


Огромное спасибо!


Еще вопрос.

Как можно сделать, чтобы брался мой файл шаблона блока, а не стандартный и как можно передавать в этот блок переменные?

Т.е. есть у нас:
$option1
$option2
$option3
и т.д...
вот их в шаблон.

Я вот хочу сделать один блок, буду выводить его под приветствием на сайте.
Но там замудреный шаблон будет. и стандартный не прокатывает.

Было бы не плохо этот файл шаблона либо в папке с плагином, либо в файле с шаблоном.

например у нас два шаблона на сайте
либо (автоматом переключает если в магазе сменили шаб, чтобы не править шаблоны при смене)
modules/plugins/box/themes/default/шаблон_плагина.html
modules/plugins/box/themes/default2/шаблон_плагина.html

либо
themes/default/plugins/шаблон_плагина.html


жуткий костыль

но работает

шаблон для внутренности блока -  uni_box.html

если нужно, чтобы шаблон uni_box.html был полностью для блока - убрать строчку

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 файлы через плагин?
Я видел в плагине метатегов
_e('........');
Но оно выводит прям под <title>.
Ниже нельзя опустить?
Хотя бы под

<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 файла).

стили, скрипты и прочее от плагинов в <head> будет добавляться ниже стилей, Js скриптов и прочих метатегов по умолчанию.


$default->assign('option2', $option2);

вот этой строчкой мы создаем метку в шаблоне {$option2}

а в шаблоне uni_box.html

{if option2}
  {option2}
{/if}


все вопросы, что с метатегами - смотрим в плагине metatags


Т.е. каждая группа выводит свое. по три поля в шаблоне. Как сделать проверку именно для группы?


конкретнее

что там за данные?

и что вообще за задача стоит?


$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 еще там не добрался)

а на счет вывода скриптов, немного не туда)
Нужно выше подключения general.js.php. Т.е. какраз под jscript_ajax.js, я у себя поправил. Эти правки будут в следующем релизе?


будут

если начну приоритеты делать в метатегах

это на долго

так что пусть пока так будет


Замечательно!

Столкнулся с проблемой.

Есть два "акшона(?)"
add_action ('box', 'box_трам');
add_action ('head', 'box_трам');

Если я акшон head изменю на любое другое, то перестает подцеплятся шаблон бокса и выводится дефолтный.
т.е. делаю так
add_action ('box', 'box_трам');
add_action ('head', 'head_трам');

Из-за этого не получается подцепить скрипты. Может я чет не догоняю?


Еще столкнулся с тем, что если в полях плагина где-то указан ' (красным выделено)
то происходит ошибка

Parse error: syntax error, unexpected T_STRING in S:\home\shop2\www\includes\classes\plugins.php(227) : eval()'d code on line 1


ок. поправлю


готово

http://www.shopos.ru/forum/index.php?topic=2773.0


Отлично.

Евгений, а как быть с add_action ('head', 'box_трам'); (через два поста вверх)
может можно в head подключать как-то еще?



Отлично.

Евгений, а как быть с 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.
Или например если вообще убрать action head, тоже перестает работать шаб плагина, а берется стандартный.

Так то я конечно делаю две функици, одна отвечает за head, другая за box.


то что не работает - сюда скидываем.

посмотрю в чем дело


Сделал пару мелки плагинов.

PNG FIX.
После включения дает возможность в настройке плагина указать классы и ID элементов шаблона где есть PNG картинки. Указывать через запятую.
P.S. из всех, этот png fix самый рабочий на мой взгляд.
Скачать

Jquery.
Просто подрубает библиотеку Jquery в шаблон. Есть две верии, сжатая и нет)
Скачать

зы. я как бы не программист. по этому просто пробовал чет сделать ;D не пинайте сильно

Огромное спасибо Евгению, за подсказки и терпение ;D


Просто подрубает библиотеку Jquery в шаблон


на странице с описанием товара и так подключается Jquery

получается с плагином - будет 2 раза подключаться?


плагин, которые вчера отправлял - еще не исправлял. времени не было


за плагины спасибо  :)


на странице с описанием товара и так подключается Jquery
получается с плагином - будет 2 раза подключаться?

хы. пупанул я) мне просто на всех страницах он нужен. я по этому и сделал в виде плагина.

за плагины спасибо

ну эт даже не пагины получились))))) так, на что хватило))
вот когда тот доделаю, что выслал, то будет немного посложнее чем эти)


У меня почему-то плагины vote, uni  и даже 2ip появляются с синими полосами сверху и снизу от самого текста. Шаблон не дефолтный. Не вообще не пойму откуда он такое офрмление взял! Можете подсказать?


из файла themes/шаблон/boxes/box.html


для default шаблона он выглядит так

<!-- box.html -->
<table class="adn"><tr><td class="hd bf">{$BOX_TITLE}</td></tr></table>
<table class="adn"><tr><td class="hdb">{$BOX_CONTENT}</td></tr></table>
<!-- /box.html -->

тоесть доступно только 2 метки {$BOX_TITLE} и {$BOX_CONTENT}


Да, он не обновился почему-то!)))



Сделал пару мелки плагинов.

PNG FIX.
После включения дает возможность в настройке плагина указать классы и ID элементов шаблона где есть PNG картинки. Указывать через запятую.
P.S. из всех, этот png fix самый рабочий на мой взгляд.
Скачать

Jquery.
Просто подрубает библиотеку Jquery в шаблон. Есть две верии, сжатая и нет)
Скачать

зы. я как бы не программист. по этому просто пробовал чет сделать ;D не пинайте сильно

Огромное спасибо Евгению, за подсказки и терпение ;D

Как подключить плагин с Jquery ? :(


в папке с плагинами создать файл например jquery.php или папку jquery и в ней файл jquery.php (без разнциы)

с содержимым

<?php
add_action('head', 'head_jquery');

function head_jquery()
{
  _e('<script type="text/javascript" src="путь_к_jquery.js"></script>');
}
?>

все


Как можно через плагин создать страницу с полным оформлением сайта?
Например как вот shop_content.php?? Т.е. shop_content.php будет не в корне, а в папке с плагином.

Т.е. есть в плагине файл any.php, что в нем прописывать, чтобы выводилось с оформлением?


Думаю вот это

//хидер
include ('includes/top.php');
require (_INCLUDES.'header.php');


контент страници

//футер
include ('includes/bottom.php');


Так не получилось пока. Ошибки лезут всякие.
Типа Fatal error:

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']);
}


А мне надо в плагине. Через файлы плагина как-то можно указать?


);
}


А мне надо в плагине. Через файлы плагина как-то можно указать?


а в какой момент эти данные нужно получать?

можно в самом плагины и делать этот запрос. в чем проблема


Что-то не получается отобразить правильно блок вот такая штука:

Где слово "Текст" должно отображаться как заголовок


Нашел не приятный баг.
Если плагин лежит в папке с шаблоном, то не подхватывается текстовик ru.php. И все добавленные настройки и т д... получаются без описания!
Я блин час бился, не мог понять че за фигня)))


В плагинах языковые ресурсы определяются через массив

= 'Показывать свои метатеги';

в отличие от модулей

define('MODULE_SHIPPING_FREEAMOUNT_TEXT_TITLE', 'Бесплатная доставка');
define('MODULE_SHIPPING_FREEAMOUNT_TEXT_DESCRIPTION', 'Модуль бесплатной доставки');

Не в этом ошибка?



Нашел не приятный баг.
Если плагин лежит в папке с шаблоном, то не подхватывается текстовик ru.php. И все добавленные настройки и т д... получаются без описания!
Я блин час бился, не мог понять че за фигня)))


сейчас подправлю.


исправлено

правка на svn:

http://code.google.com/p/shopos/source/diff?spec=svn1829&r=1829&format=side&path=/trunk/upload/includes/classes/plugins.php


Ни как не могу понять как через плагин выводить что-то в main_content со всем оформление сайта.
Т.е. страница будет вызываться по index.php?page=my_plugin_page

Подскажите плиз, а то несколько плагинов валяются из-за этого без дела((
А именно: каталог ссылок, галерея, чат и возможно мини форум...


Тут сегодня плагинами крутил, есть плагины например стандартные которые нужно переделать под шаблон

но когда плагин есть и в основе и шаблоне тогда возникает ошибка,

предлагаю зделать чтобы плагины из шаблона имели приоритете перед плагинами основы



Тут сегодня плагинами крутил, есть плагины например стандартные которые нужно переделать под шаблон

но когда плагин есть и в основе и шаблоне тогда возникает ошибка,

предлагаю зделать чтобы плагины из шаблона имели приоритете перед плагинами основы


тоесть если с таким же именем плагин существует в шаблоне то просто тот, который в в магазине не подключать. а если подключен - удалять?

а если пытаемся установить плагин в магазине, а такой существует в шаблоне?
в шаблоне отключать, а в магазине включать?

не сложно. до следующей версии сделаю



Ни как не могу понять как через плагин выводить что-то в 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);

}


Жень, спасибо. Уже на шаг ближе к истине))
Так. Что-то я намутил... выводит шаблон основной, но только он от <body> и до </body>. Точнее то, что внутри. Нету html, css  и т.д...


а если подключить 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 стили т .д...


ок. сейчас посмотрю как это реализовать



ошибка
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');
 
}
?>


Во! Работает.
правда bottom.php почему-то не пашет. т.е. не добавляет </body></html> и копирайт.


Жень, как-то можно еще сделать breadcrumb?

нашел в доках breadcrumb_add, как пользоваться? Можно примерчик?



Жень, как-то можно еще сделать 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 файл подключается везде.


Спасибо, выводится. Правда не там где надо)
У меня breadcrumb выводится после <body> почему-то.
Как-то можно зацепить на {$navtrail}?


Ничего, что у меня функция в функции?


на старых версиях php такое походу работать не будет


хм. а как тогда сделать можно?



Спасибо, выводится. Правда не там где надо)
У меня breadcrumb выводится после <body> почему-то.
Как-то можно зацепить на {$navtrail}?


ну например:

$osTemplate->assign('navtrail', $breadcrumb->trail(' &raquo; '));


Ага. Теперь как надо. Спасибо!



хм. а как тогда сделать можно?


пока никак

is_page()

но она пока слабовата)


Да. Пробовал с is_page, но ничего не вышло.
Ладно. Пока пусть так будет.


Жень. Еще знаешь что не помешало бы. Чтобы через плагин можно было что-то выводить в карточках товаров или лучше вообще глобально выводить, чтобы можно было использовать везде. Как например плагины для smarty, то, что я тут постил. Через них вывод идет во все списки товаров.
Например в файлах которые выводят товары сунуть какой-то хук, чтобы не цеплять на уже существующие метки.
А лучше так. Например в плагине я что-то сделал, что будет выводиться в товарах. Например какой-то текст в зависимости от категории.
Делаю html файл в котором будет оформление для моего текста. Далее в шаблон передается "переменная" которая будет выводить то, что я там сделаю.
А вывод цеплять типо такого {$plugin|text}
Т.е. в месте, где вставлен {$plugin|text} будет вывод того, что я сделал в плагине.
Короче как-то так. Так реально сделать? И вообще насколько это актуально?


Т.е. чтобы не пихать стандартные метки для вывода, а сделать так, чтобы самому задавать в плагине.
Например в плагине: text, price, any_content
а в шаблоне вставляю просто: {$plugin|text}, {$plugin|price}, {$plugin|any_content} и т.д...


В смарти пайп (|) имеет свой смысл передачи аргумента в функцию:

{$module_data.NEWS_CONTENT|os_truncate:$smarty.const.MAX_DISPLAY_LATEST_NEWS_CONTENT:" ..."}

Если $plugin у вас массив, то поле обозначается, как в примере выше, - $module_data.NEWS_CONTENT, стало быть корректный формат что-то типа {$plugin_myplugin.text}. Только я не понимаю, зачем всё это, если хуки (называемые тут фильтрами) и так позволяют делать это гибче.


Я (|) привел для примера) Понятно, что надо делать иначе.

Через фильтр нельзя же сунуть что-то на {$plugin_myplugin.text} и вставлять {$plugin_myplugin.text} в необходимом месте в шаблоне?
Просто нету конкретных примеров в доках.

Вчера выводил доп. поля в списки товаров, и заметил apply_filter в includes\classes\product.php
Получается там тоже можно использовать фильтр. Но нужно будет цеплять на уже существующий тег в шаблоне. Например на {$module_data.PRODUCTS_PRICE} или подобный. А это не удобно на мой взгляд.


Подскажите еще вот такую штуку.
У меня плагин выводит разные страницы на сайте. Те страницы которые созданы в админке плагина.

Страницы примерно такие /index.php?page=content&coID=1

Пробую что-то вроде

function content_title($value) {
$value = $content_data['title'].$value;
return $value;
}

Но заголовок пуст почему-то всегда.

Делаю естественно уже после получения данных из БД
такой заголовок пашет норм.
function content_title($value) {
$value = 'Заголовок'.$value;
return $value;
}


Подскажите плиз нубу как правильно сделать)


И еще вопрос.

Реально ли в плагине сделать ЧПУ?

Сейчас у меня так, при включении "Использовать короткие URL адреса"
/index.php/page/content/coID/1/Content
а хочу так
/content.html

В БД плагина завел поле content_page_url, где записывается урл страниц.
Но как я понял, после ковыряния, надо еще в redirector.php, что-то дописывать...

Хочется сделать урлы нормальными. а то и без ЧПУ урлы длинноватые получаются
/index.php?page=content&coID=1


думаю ошибка в запросе к БД, или то поле в базе пустое


Нет. Тут другое.

shop_content обрабатывается в redirector.php. Там получаем из БД content_page_url.
У меня плагин почти аналог shop_content, т.е. вывод в блок и вывод страниц как там.
Просто ссылки не /shop_content.php?coID=2, а /index.php?page=content&coID=2

Видимо надо добавить какой-то кейс в redirector.php(пробовал, не получилось) для плагина. или сделать какой-то общий каркас ЧПУ для плагинов, чтобы было проще.


не совсем понял твой вопрос ты не можеш вывести страницу

/index.php?page=content&coID=2

ели ты про ссылки что бы было

/index.php/page/content/coID2

то тут нужно использовать функцию

os_href_link

она автоматом формирует такие ссылки но вот их сервер не видет поскольку нету правила в .htaccess


у меня тоже есть такая проблема, сейчас долбаю плагин галереи, плагин уже почти готов, осталось доделать пару страничок админки

и тоже кстати вид таких ссылок был бы не плох


Я НЕ об этом, совсем! Я в #90 посте написал.

Я о том, как мне сделать ЧПУ которое я пропишу для страницы.

Сейчас у меня ссылки без коротких УРЛ такие
/index.php?page=content&coID=1
и такие  с короткими УРЛ
/index.php/page/content/coID1

А мне нужно сделать так, что бы ссылка была та которую я прописал в content_page_url.
А content_page_url для shop_content тянется из redirector.php. Вот и интересует как сделать так, чтобы не затрагивать redirector.php или хотя бы как правильно делать кейс в redirector.php, если у меня ссылки такого вида /index.php?page=content&coID=
С .htaccess это понятно, что нужно правило.

Интересует именно формирование УРЛ из content_page_url


править преимущественно надо manager.php и redirector.php.
в общем-то, кейсы вероятнее всего будут похожи на уже существующие.
если сам не разберешься, то могу помочь.
только не завтра, а скажем послезавтра. завтра дел, сам знаешь, по горло у меня будет.


Жаль, что надо будет править файлы движка.
Думал может можно без этого, а чисто в плагине.

Собственно, мне это нужно для плагина который дает возможность выводить дополнительные блоки по типу content & information. Два вида блоков: ссылки(на страницы) и текст в блоке(произвольный). Ну и конечно добавление страниц по типу Информационные страницы.
Вот для страниц как раз и хочу сделать ЧПУ.


специфику пока не очень уловил, но может тебе и использовать в плагине обычные инфо страницы?

Вообще можешь подробнее объяснить какую цель должен выпонять плагин, для которой обычные инф. страницы не подходят?


Да ни чем. тоже самое, что и инфо страницы. Только добавлено более блоков для вывода. Там в принципе можно и с обычными инфостраницами скрестить данный плагин, но я решил покопаться, как и что....))
В данный момент при добавлении страницы из админки, можно выбирать из 4 текстовых и 4 блоков с ссылкой.
Текстовые блоки - выводят текст который был введен на странице
Ссылочный блок - выводит ссылки на странице созданные в плагине по типу box_content.

Т.е. практически аналог, только урезанный. без привязки к товарам, загрузки файлов и т.д...
Времени учить пых у меня толком нету, а поделать что-то интересно)


ежели хочется чтобы отдельно от инф страниц было, тогда думаю без правок указанных выше файлов не обойтись. А если привязать в инф. страницам, тогда можно просто из плагина их создавать и отмечать в базе, какие ID-шники "принадлежат" данному плагину.


Источник



Copyright ShopOS