СозданиеМодуля
| Автор: Александр Добавлено: 2005-05-04 22:00:56 |
Создание Своего Модуля
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 портала, от его имени будут расходится все письма с портала (рассылка, запросы на активацию). | |
| $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). |
| Примечание: все эти переменные так же доступны через массив $val (например: $val['portal_skin'], $val['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 пользователя | |
| $user_url | URL Сайта | URL Сайта пользователя, если есть |
| $tema_scan | Массив имен файлов | При запуске "Сканера тем" заполняется массивом имен файлов шаблона, в дальнейшем используется для подключения необходимых файлов шаблонов |
| $user_chmod | Права для модераторов | Модератор имеет право на каждый отдельный модерируемый модуль |
| $useripadress | IP адресс пользователя | Используется для зашиты портала |
| Переменные сессий лучше вызывать и записывать через масив $_SESSION, вид будет например: $_SESSION['user_mail'] | ||
| Переменные Автоопределения | ||
| Переменная | Допустимые Значения | Описание |
| $portal_root | ПОЛНЫЙ СЕРВЕРНЫЙ ПУТЬ | Определяет полный серверный путь к директории, куда установлен портал. |
| $portal_subdir | СУБДИРЕКТОРИЯ | В случае, если портал установлен не в корень сайта, а в директорию (например: http://site.ru/portal/index.php), то эта переменная содержит промежуточную между http://сайт.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://мой-сайт.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 &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>
Тема страницы:

Версия для печати
Скачать статью