Автор Тема: Мануал по созданию своего инструмента  (Прочитано 10445 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Grigoriy

  • Новичок
  • *
  • Карма: +2/-0
  • Пол: Мужской
    • Просмотр профиля
Здравствуйте интересует пример создания собственого инструмента. Буду очень благодарен.

Оффлайн forwebm

  • Администратор
  • Постоялец
  • *****
  • Карма: +9/-0
    • Просмотр профиля
Re: Мануал по созданию своего инструмента
« Ответ #1 : 13 Июнь 2012, 13:15:53 »
================= Добавление инструмента в CMS seo-tools ===========================

**** Важно!! - для создания своего инструмента необходимо хорошо знать ООП в php, и сам php соответственно ))

**** Все идентификаторы строк размещаются в файле ресурсов строк конкретного языка, если используются несколько языков интерфейса проекта!

1) Прежде чем добавить инструмент необходимо определиться с идентификатором будущего инструмента. Идентификатор может состоять из символов a-z и знака подчеркивания. Данный идентификатор также будет использоваться для доступа к инструменту, пример: http://forwebm.net/tools/идентификатор/

2) После того, как идентификатор придуман - в файле конфигурации инструментов необходимо создать новый блок, параметры нового инструмента:
tools.conf.php

пример:
  //новый инструмент
  'идентификатор' => array(
   'descr' => 'toolbase64encodedecode',  //идентификатор ресурсов строк для названия нового инструмента
   'keywords'=> '',   //идентификатор для ключевых слов
   'metadesc'=> '',   //идентификатор для мета тэга description
   'Ldescr'  => '',   //'идентификатор_строки' - для указания описания инструмента, доступно во всех инструментах
   'tdescr'  => '',   /* развернутое описание инструмента на странице инструмента, описывает идентификатор
                       html текста, который будет отображаться на странице инструмента, Если пусто - будет
   отображаться стандартное описание инструмента, указанное в файле шаблона инструмента */
   'onlyforadmin' => false, //доступен только для админа (например при изменении)
   'onlineonly' => false  //доступен только для авторизованных пользователей
  ),
 
Все данные параметры можно будет в последующем изменять в админке в разделе настроек инструмента.
Если необходимо добавить новые настройки - вы можете самостоятельно определить новые поля. Допустимы следующие типы для настроек, которые могут быть изменены в последующем в админке:
-----------------
string - строка, пример такой настройки:

'myoption' => '', //по умолчанию - пусто
-----------------
boolean - да или нет, пример:

'myoption' => false, //по умолчанию нет (false)
-----------------
int,float - числа, пример:

'myoption' => 0.50, //по умолчанию - 0.50
-----------------
array - список (без вложения, только 1 уровень, определяет список), пример:

'myoption' => array('first', 'second'), //по умолчанию 2 строки


-----------------

Новые параметры будут доступны для изменения в админке, в разделе настроек инструмента только, если к настройке назначен идентификатор описания. Идентификатор для элемента настройки должен выглядеть следующим образом:

 toolopt_ + название_настройки
 'toolopt_название' => "Идентификатор строки `среднего` описания инструмента (опционально), отображается в списке инструментов.",
 
например:
'toolopt_myoption' => "Моя новая настройка для инструмента",

----------------

После того, как настройки сформированы, следует создать файл обработчика инструмента, для этого:

в каталоге tools\ каталога ядра необходимо создать файл (кодировка UTF-8 без BOM). Имя файла будет иметь вид:

tool-идентификатор.php
например:
tool-mynewtool.php

В данном файле необходимо создать класс, который будет наследником от 1 из двух классов:
а) если инструмент выполняется через ajax - от w_tools_def_mass_ajax  если нет - от w_toolitem_noajax_method

Имя класса должно быть следующим:
w_toolitem_идентификатор
пример:
w_toolitem_mynewtool

Любой наследник как от w_tools_def_mass_ajax, так и от w_toolitem_noajax_method должен содержать один обязательный метод:
function _DoActionThisTool() { }
Данный метод является абстрактным и должен быть описан в любом классе нового инструмента. Данный метод выполняется всегда, как при заходе на страницу инструмента, так и при любых других операциях, где используется обращение к странице инструмента, поэтому разделять выполнение действий в данном методе в зависимости от того, выполняет пользователь операцию или просто заходит на страницу инструмента необходимо Вам при разработке инструмента.

Пример каркаса класса для инструмента с идентификатором:  mynewtool, который будет выполняться без ajax

class w_toolitem_mynewtool extends w_toolitem_noajax_method {
  protected
   $result;
 
  function _DoActionThisTool() {
   
   return true; 
  }//_DoActionThisTool
 
 }//w_toolitem_mynewtool

Описание класса w_toolitem_noajax_method или w_tools_def_mass_ajax Вы можете посмотреть в файле tools.control.lib.php каталога ядра проекта
Для установки ошибки, например при проверки данных, которые вводит посетитель или любых других ситуациях используется метод $this->SetError('текст ошибки'); - метод возвращает всегда false, поэтому в случае ошибки Вы можете завершать выполнение инструмента в методе _DoActionThisTool возвращая результат метода SetError
пример:
class w_toolitem_mynewtool extends w_toolitem_noajax_method {
  protected
   $result;
 
  function _DoActionThisTool() {
   
   return $this->SetError('ошибка )'); 
  }//_DoActionThisTool
 
 }//w_toolitem_mynewtool

Для получения настроек инструмента в обоих классах используются методы:
$this->GetToolLimitInfoEx('имя настройки')метод возвращает === false если настройки нет, иначе значение настройки.
Для классов w_toolitem_noajax_method и w_tools_def_mass_ajax определены общие методы общих настроек, например задержки, оплаты и прочего, подробнее см структуру данных классов.

В примере класса я определил переменную $result - данную переменную стоит определять практически всегда, поскольку для любых наследников указанных выше 2 классов применим метод GetResult(), который используется для отображения данных в шаблоне инструмента.
общее описание из классов наследования:
  /** возвращает параметр из массива $this->result
  *   В качестве пути по массиву указывается ключ с разделителем,
  *   пример:
  *   GetResult('item')
  *   или
  *   GetResult('item.subitem')
  *   или
  *   GetResult('item.subitem.subitem')
  *   и т.д. В качестве вложения используется точка в имени ключа результата       
  */
если значения не существует - вернет === false

После того, как определен класс для нового инструмента - необходимо создать для него шаблон:
В каталоге шаблонов + \tools\ создать файл (utf-8 без bom), который будет иметь имя:

tpl_идентификатор.tpl
пример:
tpl_mynewtool.tpl

В данном инструменте, в шаблоне будет доступна переменная $tool_object - которая является экземпляром класса, который был создан для нового инструмента, через него Вы можете получать данные от класса инструмента.
Описание языка шаблонизатора см в офф. справке - http://www.smarty.net/docsv2/ru/

p.s
Для более подробного изучения примера создания инструмента Вы можете использовать в качестве демонстрации любой из 49 инструментов, имеющихся в данный момент в проекте. (среди данных инструментов например можете посмотреть строение инструмента whois - его интерфейсы минимальны по кол-ву кода и легко могут дать подробную информацию о его использовании).

p.s
После того, как будет добавлен инструмент - раздел настройки инструмента в админке, а также настройка иконок и другие настройки и места применения инструмента активируются автоматически и будут доступны в проекте.

Оффлайн Grigoriy

  • Новичок
  • *
  • Карма: +2/-0
  • Пол: Мужской
    • Просмотр профиля
Re: Мануал по созданию своего инструмента
« Ответ #2 : 13 Июнь 2012, 13:25:37 »
Огромное спасибо!!! Так легче разобраться)

Оффлайн forwebm

  • Администратор
  • Постоялец
  • *****
  • Карма: +9/-0
    • Просмотр профиля
Re: Мануал по созданию своего инструмента
« Ответ #3 : 13 Июнь 2012, 13:32:29 »
По любым вопросам - обращайтесь!