0
<< предыдущая заметкаследующая заметка >>
22 февраля 2010
Документация движка: часть 1 - модули, окна, majax

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

Итак, краткое описание основных функций с примерами.

В основе движка лежат три идеи:

1) Вызываемые модули {_ИМЯ:параметры_}

2) Всплывающее окно helps()

3) Обмен с сервером majax()

И, как показывает практика, этого конструктора вполне хватает, чтобы городить самые причудливые штуки. Разберем по порядку.

1. Модули

Модуль — это короткий код (одной функции), написанный на языке PHP и вызываемый непосредственно из текста заметки или шаблона. Модуль - это файл МОДУЛЬ.php, который кладется в папку site_mod (или site_module, если автор счел его «системным», хотя физически разницы нет).

Вызов модуля происходит из HTML-кода (из текста заметки или темплейта дизайна) командой {_МОДУЛЬ:параметры_}, при этом должен существовать файл МОДУЛЬ.php, содержащий одноименную (это важно!) процедуру function МОДУЛЬ($параметр){}

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

Пример простого файла-модуля B.php:

<?php function B($e) { return "<b>$e</b>"; } ?>

Пишем в заметке "{_B:жырный_}", видим: жырный

А если надо передать несколько параметров? Универсальной процедуры разбора я не делал, здесь все на ваше усмотрение: придумывайте любые форматы и разбирайте параметр $e. Например, если мне надо получить два параметра, разделенных запятой, я пишу: list($link,$opisanie)=explode(',',$e,2); $link=c($link); $opisanie=c($opisanie); Вчера, например, я делал модуль меню с двумерными параметрами: сперва делил на строки, затем в каждой строке разбирал через разделитель | перечисленные тексты, имена картинок, ссылки.

Штатно присутствующая в движке функция c() очищает текст от пробелов в начале и конце и прочего мусора. Изначально параметр $e очищен, но дальнейшие разборки я всегда чищу вручную — мало ли пробелов кто для красоты втиснет.

Заодно для простоты учтите, что h() — это htmlspecialchars() для тех, кто заебался всякий раз набирать эту непроизносимую строку, а e() — это mysqlescapespecial... блин, я даже не помню, как она называлась в оригинале, но вы поняли.

Итого: пишем любой модуль, кладем в site_mod/ и радуемся жизни, вызывая его из текста заметки или шаблона.

Хозяйке на заметку: уже достаточно давно модули можно сколь угодно (до 200 кажется) вкладывать друг в друга. То есть, можно писать: {_CENTER:{_B:{_IMG:... Замена начнется с самого внутреннего модуля.

Мораль: пишите интересные и полезные модули, присылайте.


2. Всплывающие окна

Всплывающее окно — это команда на JavaScript, которая позволит выдать окошко с неким содержимым и красной кнопкой закрытия. В будущем окна будут легко перетаскиваться, исправятся другие мелкие глюки. Но суть останется — это команда helps( id_окна , текст_окна )

Вот простой пример:

Вот <a href="javascript:helps('okno14','Джып купил москвич богатый<br>Шобы ездить за зарплатой!')">простой пример</a>

Хотя мне больше нравится такое оформление окна:

<a href="javascript:helps('okno14','<fieldset><legend>антимоскальские частушки</legend>Джып купил москвич богатый<br>Шобы ездить за зарплатой!</fieldset>')">оформление окна</a>

Итог: в любой момент и из любого места в коде html (или прислав аяксом) вы можете дать JavaScript-команду helps(id,text) и получите окно с текстом. Закрыть его принудительно можно командой clean(id), если помнить id, разумеется.

3. Обмен информацией с сервером, функция majax()

Идеальный протокол работы с сервером - это когда на сервер передается массив из любого количества параметров, а в ответ сервер возвращает некий код JavaScript, который будет выполнен. Тот факт, что в ответ мы получаем не текст для вставки в определенное место, а исполняемый код, открывает нам самый широкий простор для моделирования чего угодно: вставляй текст куда хочешь, открывай всплывающие окна, меняй стили элементов, отправляй браузер обнаглевшего посетителя на сайт символического направления - твори!

На стороне клиента запрос делается одной командой на JavaScript:

majax('скрипт.php',{параметр1:'значение1',параметр2:'значение2'})

В ответ сервер пришлет код, и он будет выполнен. На стороне сервера необходимо написать на PHP скрипт.php и положить его строго в папку ajax/ (искать его движок станет там). Серверная часть тоже нехитрая: в начале три необходимых include (переданные клиентом параметры найдутся в массиве $_REQUEST), а в итоге работа серверной части заканчивается отправкой результата - команда otprav(«javascript-код»). Пример:

Клиентская часть. На странице пишем код majax-запроса:

<center>Введите число: <input type=text id='chi'><input type=submit value='go' onclick="majax('test.php',{N: idd('chi').value })">&nbsp;<font color=green id='chi_otvet'></font></center>

Серверная часть. На сервере создаем файл /ajax/test.php:

<?php
include "../config.php"; include $include_sys."_autorize.php";
require_once $include_sys."JsHttpRequest.php"; $JsHttpRequest =& new JsHttpRequest("windows-1251");

$N=$_REQUEST['N'];
if(!intval($N) and $N!='0') idie("Я же просил число!");
if( $N%2 ) otprav("zabil('chi_otvet','нечетное'); helps('chi_okno','нечетное!');");
otprav("zabil('chi_otvet','четное'); helps('chi_okno','четное!');");

?>

Получаем:

Введите число:  

Итого: все понятно.

Хозяйке на заметку: может такое статься, что вам понадобится отправить не просто javascript-код для немедленного исполнения, а некие переменные или функции, чтобы использовать в будущем. Не вопрос. Смело отправляйте их в формате fun=function(){}; и они запишутся в память, пока вам не приспичит вызвать fun().

Приложение 1: Полезные функции движка для программирующего на php

Дико полезно для отладки:

idie('текст') - экстренно вывалиться, выдав на экран 'текст'. Если эта функция вызвана не в движке, выдающем страницы, а в модулях ajax (они вызываются в фоне и чем завершились не поймешь), то появится всплывающее окно с этим текстом.

dier($array) - экстренно вывалиться, показав содержимое массива $array. Если выполняется аякс, массив будет выдан во всплывающем окне.

logi('file.log', 'text') - дописать 'текст' к файлу file.log, лежащему в папке, указанной в переменной $host_log конфига (по умолчанию папка log/)

Приложение 2: Полезные команды JavaScript

idd(id) - взять document.getElementById(id)
zabil(id,text) - забить text в элемент id
vzyal(id) - взять текст (.innerHTML) из блока id
zakryl(id) - спрятать блок id
otkryl(id) - открыть блок id

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Linux Ubuntu Firefox
1
0
Andrey Pozdnyakov
Здорово.
Осталось только научиться писать скрипты на php и javascript.
Windows
 Киев
0
0
Леша
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
чтобы писать скрипты совсем не обязательно учить эти языки :) парадокс..
в инете много примеров
Linux Firefox
0
0
Артем Павлов
О, круто, так стало гораздо понятнее!

Кстати, ссылки "Добавить комментарий" у меня работали, я точно помню, просто у меня что-то непонятное с хостингом щас творится.
Windows Opera
0
0
{name}
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Во-первых, спасибо! Познавательно и полезно.
Во-вторых, почему-то логин перестал работать здесь. Пустое поле с красной кнопкой. И странно отображается эта страница в опере: после слов "файла-модуля B.php:" все последующие абзацы заключены в красную рамочку матрешкой - 6 текстовых контейнеров вложенных друг в друга.
В FF - все нормально
Windows Opera
0
0
Roman Erykalov
после того как отправил сообщение через форму коммента, заработал логин - я сейчас на работе
Windows Opera
0
0
{name}
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Что-то с версткой - http://img-fotki.yandex.ru/get/3910/vsegoponemnogo.9/0_3438d[...]
Скриншот не мой, но я вижу то же самое.
Windows
 Киев
0
0
Леша
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
видел такое в гугл-ридере, а на сайте нормально сейчас.
Windows Opera
0
0
Monstradamus
Про незакрытые цитаты (quote - красные рамки): Лео, а тэг </blockquote<p> точно сработает? Хром его понял, мозилла, видимо, тоже, а Опера упрямится.
Windows Opera
0
0
Monstradamus
UPD. Посмотрел другие заметки с цитированием. Похоже и правда дело в закрывающей скобке.
Windows Opera
0
0
{name}
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Вот за последние 5 функций спасибо, очень сокращает время :)
<< предыдущая заметка следующая заметка >>