Создание Своего Модуля
1. Расположение Файлов
2. Переменные
3. Пути и Ссылки
4. Защита Модуля от несанкционированного доступа
5. Многоязычный Модуль
6. Создадим Экземпляр Модуля На Главной Странице
7. Создание Своей Системной Переменной
8. Управление Правами Доступа К Модулю
9. Как создать отдельную страницу на портале
10. Что должно быть в файлах PHP
1. Расположение Файлов
Структура расположения файлов модулей для пользователей, все модули хранятся в директории mod/. Соответственно, Вам необходимо будет создавать директорию с Юзер-Частью модуля в этой директории.
Все ссылки генерируются автоматически, после добавления информации о модуле в БД Навигации (см. Как создать отдельную страницу на портале).
Нас интересует, как же происходит обращение к файлам модулей.
По умолчанию, "стартовая" страница модуля - index.php, поэтому Ваш модуль будет вызываться как:
http://my_domen.ru/?nma=faq&fla=index или http://my_domen.ru/?nma=faq
Переменная $nma показывает какой модуль мы загружаем (mod/faq/), а переменная $fla – файл, если он не указан, то по умолчанию (mod/faq/index.php).
Нас спрашивали, можно ли загрузить скрипт, находящийся на другом сервере:
http://my_domain.ru/?nma=http://xaker.com&fla=crack
И типа в этом случае в движок загрузится файл http://xaker.com/crack.php
Хочу опровергнуть данную теорию: в index.php движка идет проверка на наличие модуля конкретно на НАШЕМ сервере, т.е. проверка идет по файловой структуре сервера, поэтому не возможно таким образом загрузить файл с другого сервера.
Кроме всего прочего идет проверка всех имен переменных есть ли вних "не символы".
Административная часть модуля должна храниться в директории admin/, где тоже необходимо создать папку, например, faq. В этой папке и должен лежать фаил index.php, который отвечает за администрацию Вашего модуля.
2. Переменные
Все переменные, применяемые в работе модуля, должны имеет уникальное имя, т.е. такие как $name, $login, $mail - лучше не использовать, они могут встречаться в самой оболочке, и модуль может перенять значение именно этих "системных" переменных. Поэтому рекомендую имена переменных указывать, как, например: $mymodper01, $mymodper02, $mymodper03 и так далее.
Так же должен обратить Ваше внимание, что все пользовательские модули находятся внутри функции, поэтому при передаче переменной как методом ГЕТ так и ПОСТ Вам необходимо будет глобализировать все используемые Вами переменные.
Например:
global $fio,$vozrast;
А если Вы используете функцию, то Вам нужно глобализировать переменную ДО функции и ВНУТРИ функции. Системные переменные уже глобализированны.
При создании модуля Вам будут доступны следующие системные переменные:
Конфигурационные Переменные |
Переменная |
Допустимые Значения |
Описание |
$portal_url |
URL Сайта |
Адрес (url) портала. Используется для проверки получаемых данных. |
$portal_mail |
E-Mail |
E-Mail портала, от его имени будут расходится все письма с портала (рассылка, запросы на активацию). |
$portal_skin |
Имя Директории С Темой |
Используемая тема, расположенная в директории /thema/ |
$portal_alias |
Имя Директории С Темой |
Используемая тема, если браузер не IE (альтернативная тема), расположенная в директории /thema/ |
$portal_smtp |
SMTP сервер |
SMTP сервер, через который будет отправляться почта, если в Опциях системы указана отправка через SMTP сервер |
$portal_smtpuser |
Login |
Логин от Ваше Mail-аккаунта для соединения с SMTP сервером |
$portal_smtppass |
Password |
Пароль от Ваше Mail-аккаунта для соединения с SMTP сервером |
$portal_mailmetchod |
Число |
Определяет метод отправки почты с портала: 0 - Функция MAIL, HTML формат; Не рекомендуется, т.к. все сообщения создавались под текстовый формат 1 - Через SMTP Сервер; 2 - Функция MAIL, TXT формат. |
$portal_counter |
yse/none |
Определяет, включен или выключен внутренний счетчик и статистика портала. |
$portal_lang |
Язык |
Определяет язык используемый порталом по умолчанию |
$portal_flood |
Число |
Время "Флудинга" в секундах. 0 означает отключенную проверку на флудинг |
$portal_optcomm |
Число |
Определяет состояние автоматической оптимизации БД. 1 - оптимизация включена, 0 - выключена |
$portal_optimize |
Число |
Определяет время в часах между автоматической оптимизацией БД |
$portal_opttime |
time() |
Т.к. автоматическая оптимизация запускается при запуске движка, т.е. не использует Cron, эта переменная содержит значение time() c момента последней оптимизации БД |
$portal_time |
Положительное или отрицательное число |
Определяет расхождение времени между временем портала и сервером. Используется в случаях, если посетители и сервер находятся в разных часовых поясах |
$portal_gen |
Число |
Определяет состояние отображения "времени генерации" страниц. Значение 0 отключает эту функцию, значение 1 - включает |
$portal_gzip |
Число |
Определяет состояние функции Gzip-компресии. Значение 0 отключает эту функцию, значение 1 - включает |
$portal_act |
Число |
Определяет метод регистрации пользователейна портале. 0 - после заполенния регистрационной формы на e-mail пользователя приходит ссылка для активации его учетной записи; 1 - активация не требуется, сразу после заполенния регистрационной формы пользователь может авторизоваться; 2 - регистрация не доступна. |
$portal_close |
Число |
Может принимать значение 0 - портал работает, или 1 - портал отключен. Можно использовать, если Вы проводите какие-либо технические работы на портале. |
$portal_closetext |
HTML Код |
HTML код отображаемый вместо страниц портала, если портал отключен (см. $portal_close). |
Примечание: все эти переменные так же доступны через массив $wcpsval (например: $wcpsval['portal_skin'], $wcpsval['portal_smtp']) |
|
Переменные Сессий |
Переменная |
Допустимые Значения |
Описание |
$sname |
ЛОГИН |
Логин пользователя. Не используется при отображении (для безопасности), но используется для привязки данных к пользователю (внутренная почта, записи в блокноте и т.п.) |
$auth |
Число |
Состояние пользователя: 1 - авторизован, инече не авторизован |
$urov |
Число |
Определяет уровень пользователя: 1 - Администратор; 2 - Модератор; 3 - Пользователь; с версии 2.0 добавлены "свободные" уровни: U4, U5, U6, U7, U8 и U9. Они предназначены для создателей модулей, по усолчанию не имеют прав |
$lang |
Язык |
Указывает язык пользователя. Если пользователь не выбирал для себя индивидуальный язык, то значение по умолчанию (см. $portal_lang) |
$skin |
Имя Директории С Темой |
Указывает на тему выбранную пользователем. Если пользователь не выбирал для себя индивидуальную тему, то значение по умолчанию (см. $portal_skin) |
$scan_d |
yes/none |
Определяет состояние "сканера тем". При значении "none" загрузка страницы портала пользователем приводит к сканированию директории с шаблоном, значение "yes" означает, что сканирование уже произведено и массив $tema_scan заполнен (о массиве $tema_scan см. ниже) |
$user_id |
Число |
Идентификатор пользователя по таблице БД wc_user. Используется для привязки данных к пользователю. |
$user_fio |
Ник |
Содержит Ник (Имя) пользователя |
$user_mail |
E-Mail |
Содержит E-Mail пользователя |
$user_url |
URL Сайта |
URL Сайта пользователя, если есть |
$tema_scan |
Массив имен файлов |
При запуске "Сканера тем" заполняется массивом имен файлов шаблона, в дальнейшем используется для подключения необходимых файлов шаблонов |
$user_chmod |
Права для модераторов |
Модератор имеет право на каждый отдельный модерируемый модуль |
$useripadress |
IP адресс пользователя |
Используется для зашиты портала |
Переменные сессий лучше вызывать и записывать через масив $_SESSION, вид будет например: $_SESSION['user_mail'] |
Переменные Автоопределения |
Переменная |
Допустимые Значения |
Описание |
$portal_root |
ПОЛНЫЙ СЕРВЕРНЫЙ ПУТЬ |
Определяет полный серверный путь к директории, куда установлен портал.
|
$portal_subdir |
СУБДИРЕКТОРИЯ |
В случае, если портал установлен не в корень сайта, а в директорию (например: http://my.ru/portal/index.php), то эта переменная содержит промежуточную между http://my.ru и index.php директорию (субдиректорию) - /portal |
$korrekt_time |
Значение time() с учетом $portal_time |
Содержит значение функции time() с учетом расхождения портала по времени с сервером (см. $portal_time). |
$module_name |
ИМЯ МОДУЛЯ |
Название используемого модуля на язые пользователя.
Например: если $lang="russian", то модель доступный по ссылке /?nma=guestbook будет называться "Гостевая Книга";
если $lang="english", то модуль будет называться "Guest Book".
В любом случае имена модулей легко меняются через модуль "Навигация" |
$portal_alter |
Опредиление браузера не IE |
Если не IE то значение 1 и используется альтернативный дизайн (скин) |
$my_http |
С какого сайта сделан запрос |
Если из текущего сайта то значение 1, если любого другого 0. Защита от залива портала спамом |
Вы можете сами создавать системные переменные (см.
Создание Своей Системной Переменной).
3. Пути и Ссылки
Передачи данных метод
ГЕТ Ваши ссылки должны выглядеть следующим образом:
$portal_subdir/index.php?nma=ВАШ_МОДУЛЬ&fla=ФАИЛ
Хочу отметить, что
$portal_subdir определяется автоматически и содержит директорию между каталогом www и index.php (корень портала), если портал установлен в корень сайта, то она пустая, если же портал установлен в
http://my_domain.ru/portal/, то она будет содержать /portal.
Так же и в формах:
<form action=”$portal_subdir/index.php?nma=ВАШ_МОДУЛЬ&fla=ФАИЛ” method=”POST”>
Ваша Форма.
</form>
Остальные данные можно предавать методом
ПОСТ
Наш движок использует расширение .php!!!
4. Защита Модуля от несанкционированного доступа
Все портальные системы защищаются от вызова файла модуля без выполнения обязательных действий (подключение к БД). В первую очередь, мы закрыли доступ к файлам модулей от обращения браузером, используя файл конфигурации Apache
;.htaccess. Ну а если портал будет использоваться на сервере, не позволяющем использование
.htaccess, то на защиту встанет PHP код:
<?
if(!defined( 'L_MOD' )){
echo "<meta http-equiv='refresh' content='0; url=/index.php'>";
exit;
}
?>
В административных частям модулей используется похожий код:
<?
if(!defined( 'L_ADMOD' )){
echo "<meta http-equiv='refresh' content='0; url=/index.php'>";
exit;
//Здесь может быть код PHP
}
?>
Эти коды нужно вписать в начало скриптов.
5. Многоязычный Модуль
Мы отступили от общепринятого правила хранить языковые переменные в файлах, мы их полностью перенесли в БД, что позволило создать Web-управление многоязычностью. Вы можете создавать, редактировать или удалять компоненты прямо в Админ-Меню.
После индексации Вашего модуля в БД Навигации (см. статью
«Регистрация Своего Модуля В БД или о модуле "Навигация"») во всех существующих на портале языках появится и Ваш модуль, что позволит Вам добавлять компоненты Вашего модуля.
В самом модуле не нужно производить подключение языковой БД, она производится автоматически.
6. Создадим Экземпляр Модуля На Главной Странице
Вы можете написать малый экземпляр Вашего модуля (последняя запись в гостевой, новый топ в форуме и т.п.) на главной странице портала…
Для этого Вы должны создать необходимый скрипт и положить его в директорию mod/blocks, желательно дать ему название (именно файлу) такое же, какое и название модуля (
mod/faq –
mod/blocks/faq.php).
После этого Вы должны зайти на страницу Администратора: «Модули На Главной» -> «Добавить». Вы увидите, что движок нашел Ваш файл и предлагает его установить, нажмите просто «Установить модуль».
Вы можете создать в нем и описание. Для этого в первой строке файла
mod/blocks/ВАШ_МОДУЛЬ.php впишите строку:
<!--description= Последниезаписивгостевую&modul=guestbook&Author=WCPS WebCode-Command&Copyright=WCPS//-->
Где
description – описание модуля;
modul – модуль;
Author – Автор;
Copyright – Копирайт.
7. Создание Своей Системной Переменной
Как говорилось выше, Вы можете создавать свои системные переменные. Для этого используйте модуль «Опции», а точнее
«Опции» ->
«Добавить параметр».
Вы должны указать Название переменной (например, portal_mysystem), Значение переменной и модуль, в котором она будет использоваться, если Вы укажите 1 - _DLA_VSEX, то она будет использоваться во всем портале. В дальнейшем её можно вызвать:
$portal_mysystem в указанном при её создании модуле…
8. Управление Правами Доступа К Модулю
Вы можете сделать свой модуль доступным только для авторизованных пользователей двумя способами:
а) при помощи проверки в самом модуле.
<?
if (empty($_SESSION['auth'])){
print _NOREG_ ; // Выведет текст « Вы должны авторизоваться!!! Если Вы ещё не зарегистрированы, Зарегистрируйтесь!!!<meta http-equiv="refresh"; content="3; url=/">»
}
else{
… Ваш Модуль…
}
?>
б) изменив настройку
«Доступ в User модулях» в модуле
«Навигация» соответствующего модуля.
В этом случае при подключении модуля движок сам выведет необходимое уведомление и запретит доступ до активизации пользователя.
9. Как создать отдельную страницу на портале.
Например: создать свою страничку "Автобиография".
Создаете папку типа
avtb, ecтественно в папке
mod.
Саму страничку
вы можете создать в любом
HTML редакторе, с текстами и картинками. После чего вы
ее записываете под именем
index.php в папку
avtb,
предварительно удалив все от начала по
<body>(включительно) и в конце
</body></html> (так же включительно).
Дальше
заходите в
админ->навигация->создать новый,
делаете доступ для всех в юзере - "Для всех"
(
mforreg = 1),
в админе - "Не выводить"(
muroven) у нас пока администрирования нет.
User модуль:
murl ставите наш модуль
avtb
и даете название в "Вывод названия по языкам:"
Автобиография.
Нажав сохранить Вы
получаете новую кнопку (в юзере ).
Линк будет иметь путь
./index.php?nma=avtb &fla=index не обязателен, он генерится автоматически.
Нажав на линк Вы получите записанную страничку
index.php из папки
avtb
10. Что должно быть в файлах PHP, или кратко как научится
програмировать?Например: файл
"./mod/about/my_about.php"Ответ: Самый
обыкновенный HTML код, но без шапки по <body> включая и до
</body></html>.
Это может быть и обыкновенный текст заключенный в таги <pre></pre>
В ведем туда программирование.
Задача - на
локал хосте не выводить.
Все что выделенно такими тегами
<? ?> относится к ПХП
остальное к HTML.
Код:
<?
if ( getenv("REMOTE_ADDR") != '127.0.0.1' ) {
?>
Здесь вписываете Текст
<?
}
?>
Да и учтите, что на локалке у Вас ничего выводится не
будет.
Если нужно наоборот, замените !(восклицательный знак) на
=(равно)
Нужно учесть что путь к страничке
./index.php?nma=about&fla=my_about
по этому еще поставим линк на главную страницу about
<center><ahref="index.php?nma=
about">Начало about</a></center>