Мы будем Вам признательны, если Вы поддержите проект Open SLAED и используя Ваши возможности, разместите наш пресс-релиз на страницах своих сайтов, проектов, форумов, блогов. Текст пресс-релиза, возможно, видоизменить под Ваш формат, не искажая смысл. Пресс-релиз можно взять на данной странице.
Иногда возникает необходимость перенаправления определённого посетителя, допустим пришедшего с определённого сайта или определённой страны, на определённую страницу. Данную потребность, возможно, реализовать стандартными средствами системы. В качестве примера, ниже мы рассмотрим несколько вариантов.
Перенаправление посетителя пришедшего с определённого сайта
1. Войдите в панель управления системой, отдел: Панель администратора >> Редактор
2. В файл внедрения в шапку системы: config_header.php
Добавляем следующую запись:
$reflink - Отвечает за адрес нужного нам сайта
Заместо: slaed.net укажите свой домен.
$metlink - Отвечает за страницу, куда будет перенаправлен посетитель
Заместо: news.html укажите необходимую страницу или сайт.
Перенаправление посетителя из определённой страны
1. Войдите в панель управления системой, отдел: Панель администратора >> Редактор
2. В файл внедрения в шапку системы: config_header.php
Добавляем следующую запись
$userlang - Отвечает за нужную нам страну
Название страны не должно быть произвольным и должно соответствовать стандартам использования класса. Правильность написания той или иной страны можно проверить в переменной $COUNTRY_NAMES файла: function/geo_ip.php
$metlink - Отвечает за страницу, куда будет перенаправлен посетитель
Заместо: news.html укажите необходимую страницу или сайт.
Выводит дни рождения пользователей на 10 дней вперед (определяется переменной $kol_days). Проверерял работу на системах 2.1 Lite и 2.2 Lite. На других работать не будет,т.к. проверяется переменная $version.
Представляю Вашему вниманию новую версию системы SLAED CMS 2.4 Lite. Основной акцент при работе над данной версией делался на исправление ошибок и не точностей предыдущих версий, а так же несколько глобальных нововведений, на которых хотелось бы остановиться более подробно. Основное из них, это дополнительные поля, которые значительно повышают удобство в использование системы, дают возможность создания, и установки своих полей в новостном и пользовательском модулях.
Предусмотрено три типа полей, это одна строка, поле с текстом и список с выбором. Опытные пользователи и знатоки PHP, без особых трудностей смогут расширить данный функционал для других модулей, так как функции, используемые дополнительными полями являются централизованными, независимыми от модулей и могут, применятся по всей системе в целом.
Следующее изменение предусмотрено для упрощения установки модулей с базой данных. Даёт возможность установки и обновление модулей непосредственно из панели администрации моделей системы. Данная возможность будет работать только в случае, если модуль разработан с учётом нового стандарта, а именно:
1. База данных должна храниться в папке модуля sql/
2. База данных должна иметь название: table.sql
3. База данных обновления должна иметь название: update.sql
Содержание файлов с таблицами базы данных стандартное, с учётом специфики MySQL. Как Вы заметили, требования минимальные и не требуют сверх дополнительных усилий от разработчиков моделей. В качестве примера, можно взять новостной модуль, который написан с учётом нового стандарта.
Общие изменения, новые возможности, модификации
При использовании ББ тег и редактора, появилась возможность выравнивания графических элементов, а так же добавление описания и альтернативного текста к ним.
Произведены изменения дающие возможность добавления неограниченного количества смайлов, которые будут определены и установлены в автоматическом режиме.
Модифицирован ББ редактор, произведена добавка шрифтов, цветов, количество размеров.
Для улучшения понимания и сферы использования, произведены языковые корректировки названий модулей новостей и статей, произведена смена графических элементов в панели администратора для этих модулей.
Модифицирована подсветка отключённых модулей в панели администратора системы. Таким образом, снижена скорость генерации и размер используемых графических элементов.
Разработана новая функция автоматического определения и установки базы, данных модуля непосредственно из панели администратора. Добавлены три основных действия, это: Установка таблиц базы данных модуля, Удаление таблиц базы данных модуля и Обновление таблиц базы данных модуля. Более подробная информация для разработчиков модулей будет описана в документации на проекте. В качестве примера в новостном модуле реализована данная возможность.
Встроенный HTML редактор, используемый в системе, обновлён до актуальной версии. Исправлены неточности в его работе при редактировании содержания в коде.
Разработана новая система установки, и использование дополнительных полей, применение которых на данный момент возможно в пользовательском и новостных модулях. Настройка и установка дополнительных полей предусмотрена в отделе администратора системы.
Исправления и корректировки
Исправлена ошибка, связанная с некорректным чтением не существующей директории в отделе загрузок панели администратора системы.
Проработаны каналы RSS, приведены к общему стандарту, исправлены не точности, добавлено отображение комментариев при просмотре в браузере.
Исправлена ошибка с просмотром каналов RSS в профиле зарегистрированного пользователя системы, в случае если данная возможность активирована администратором.
Откорректированы все функции работы с каналами RSS, произведена смена фильтрации и определение даты публикации материалов.
Исправлена ошибка AJAX связанная с предварительным просмотром. Удалены лишние, не используемые компоненты.
Исправлена проблема с просмотром не активированных блоков в панели администратора системы.
Откорректирован файл интеграции с форумами. Исправлена проблема появлявшееся при регистрации новых пользователей в случае использования нестандартных префиксов таблиц базы данных.
Исправлена проблема в модуле опросов связанная с голосованием. Проблема присутствовала на версии PHP 5 и была связанна с передачей переменной с идентификатором опроса.
Откорректировано отображение кнопок добавления и редактирования в панели администратора модуля вопросов и ответов.
Исправлена ошибка, связанная с редактированием внедрений в систему при активированном HTML редакторе, который внедрялся и мешал корректному редактированию внедрений.
Исправлена проблема с некорректной работой ББ редактора под браузерами Firefox, Opera в случае использования двух окон ввода.
Откорректировано отображение файлов статистики ошибок и нападений в отделе безопасности панели администратора системы.
Готова к выпуску новая версия системы SLAED CMS 3.2. В данной версии были учтены основные пожелания клиентов касательно новых функций третьей ветки системы. Были внесены положительные модификации и изменения уже существующих функций и возможностей. Основными из них являются повышение безопасности системы от возможных «Flood Atack» и «DDoS Atack», написаны новые функции интеграции системы SLAED CMS с самыми популярными и актуальными на сегодняшний день форумами: Invision Power Board (1.3.1, 2.0.*, 2.1.*, 2.2.2), phpBB, vBulletin, SMF, а так же для улучшения индексации поисковыми системами, написано полнофункциональное ЧПУ для основных модулей системы. Более детальную информацию о нововведениях и проделанных работах Вы можете получить в подробном просмотре.
Написана и установлена функция кэширования системы. Данная возможность предназначена для сайтов с очень высокой посещаемостью и даёт возможность максимально снизить нагрузку на сайт вплоть до уровня нагрузки производимых HTML страницами. В конфигурациях кэширования возможно установка времени кэширования, а так же кэширования на выбор, только главной страницы системы или всех её отделов.
Произведены изменения в функции счётчиков посетителей и просмотров страниц сайта, исключающие возможные сбои в работе.
В конфигурациях панели администратора добавлена возможность выбора используемого в системе редактора. BB Редактор, HTML Редактор или для опытных пользователей вообще без редактора.
Для улучшения функциональности произведена смена формата лог файлов системы. Изменениям подверглись функции отслеживания ошибок и нападений.
В панели администратора системы установлен редактор внедрений в систему. Редактор даёт возможность непосредственного редактирования файлов для внедрения своих скриптов или функций в ядро системы, head системы, а так же файлов конфигурации системного ЧПУ.
Для улучшения индексации поисковыми системами, написано полнофункциональное ЧПУ для основных модулей системы, таких как: Каталог файлов, Анекдоты, Каталог сайтов, Медиа каталог, Статьи, Магазин. Этим не ограничиваются возможности ЧПУ системы, Вы с лёгкостью можете расширить правила для других модулей непосредственно из панели администратора.
Переписаны функции работы счётчиков системы. Добавлен пакет новых графических мини баннеров для использования в системе. Пакет состоит из графических элементов размером 80х15.
Полностью переписана административная часть управления системы безопасности и частично сама система безопасности. Таким образов улучшена возможность просмотра лог файлов ошибок и нападений, добавлена их загрузка, исправлены и оптимизированы некоторые участки кода.
В блок системной информации панели администратора добавлены проверки информации по следующим параметрам: Максимальный размер загружаемых файлов на сервер, Максимальный размер рабочего объёма памяти на сервере, Мод Реврите для работы преобразования ссылок в ЧПУ.
Переписана конфигурационная часть панели администратора модуля медиа файлов. Добавлена возможность установки разделительного знака для титлов и заголовков, что повышает привлекательность модуля для поисковых систем.
Исправлена ошибка, проявлявшаяся при добавлении более четырёх файлов в панели администрации модуля медиа файлов.
Координации нижней части основного файла подвергнута стандартная тема оформления Reloaded.
Модифицированная система отслеживания статистических ошибок, добавлена возможность идентификации всего спектра ошибок протокола HTTP/1.1.
Значительным модификациям подвергся модуль каталога ссылок, произведены изменения в конфигурациях модуля. Теперь используется всего одна переменная, что в свою очередь сокращает потребляемые ресурсы сервера, улучшает функциональность, повышает скорость работы.
Для модуля каталога файлов добавлены новые возможности способов загрузки файлов для посетителей. Стандартный режим – Как и было до этого, с дублированием прямой ссылки. Скрытый режим без прямой ссылки и скрытием реальной директории хранения файлов. Скрытый режим баз прямой ссылки и сменой реального названия файла и скрытием реальной директории хранения файлов.
В модуле каталога файлов добавлена возможность программирования публикаций на желаемое время. Модифицирован способ загрузки файлов и функций добавления, редактирования.
Доработана языковая поддержка модуля каталога файлов, для всех трёх стандартных языков системы.
Модифицирован блок навигации автоматического определения модулей системы. Появилась возможность просмотра модулей активированных только для администраторов. В случае отсутствия модулей в той или иной группе, заголовки группы не выводятся.
Модифицирована система безопасности, добавлены дополнительные функции защиты. Защита от атак переполнения, типа «Flood Atack» и «DDoS Atack». В конфигурациях безопасности добавлены опции проверки передач по средствам переменной POST, проверка всей входящей и запрашиваемой информации. Возможна установка интервала между запросами атакующего, в секундах.
В качестве улучшения защиты системы от спамерских роботов, установлено подтверждение секретного кода при добавлении медиа файлов.
Написана новая функция, которая защищает E-Mail адреса, используемые в системе от индексации и обнаружения спамерскими роботами. Защита адреса установлена в профиле пользователя при просмотре информации.
Установлена возможность блокирования и подавления ошибок браузера вызываемых некорректной работой JavaScripts. Активировать блокировку ошибок можно в конфигурациях отдела безопасности, панели администрации системы.
Полностью переписаны функции интеграции системы SLAED CMS с самыми популярными и актуальными на сегодняшний день форумами: Invision Power Board (1.3.1, 2.0.*, 2.1.*, 2.2.2), phpBB, vBulletin, SMF.
За счет более универсальных функций общий вес системы уменьшился в разы за счет удаления из системы файлов интеграции SDK для форума IPB.
Интеграция включает в себя
Возможность одновременной авторизации на форуме при авторизации на сайте
Возможность одновременного выхода на форуме при выходе на сайте
Возможность регистрации пользователей как с сайта, так и с форума
За счет написания гибких правил интеграцией предоставляется возможность объединения системы SLAED CMS и одного из вышеописанных форумов, даже если сайт и форум работали отдельно некоторое время. Так как интеграция получилась очень гибкой, то в будущих версиях системы остается возможность добавления как новых функций к интеграции, так и новых форумов.
В панели администратора модуля магазина добавлен поиск по клиентов с различными параметрами, что повышает возможность быстрого нахождения пользователя при их большом количестве. Добавлена подсветка по поисковым запросам.
В панели администрации пользователями добавлена подсветка результатов поисковых запросов при использовании поиска.
Приобрести систему можно с 01.05.2007 в магазине нашего проекта. Актуальные пользователи версии 3.1 Pro смогут скачать бесплатное обновление до версии 3.2 Pro непосредственно в отделе для клиентов.
В серии статей "Ten Security Checks for PHP" кратко рассматриваются 10 наиболее часто совершаемых PHP программистами ошибок, приводящих к проблемам с безопасностью скриптов.
Избегайте использования переменных сформированных на основании данных пользователя в функции включения файла (include, require) или доступа к файлу (readfile, fopen, file). Например: include($lib_dir . "functions.inc"); include($page); переменные $lib_dir и $page перед этим нужно проверить либо на предмет наличия запрещенных символов, либо сопоставить с заранее определенным массивом допустимых значений.
if (!(eregi("^[a-z_./]*$", $page) && !eregi("..", $page))) {
die("Invalid request");
}
Необходимо экранировать опасные символы ( и ') в переменных участвующих в SQL запросах. Например, злоумышленник может передать переменную вида "password=a%27+OR+1%3Di%271" которая будет использована в SQL запросе как "Password='a' or 1='1'". Решение: включить magic_quotes_gpc в php.ini или экранировать переменные самостоятельно через addslashes();
Никогда не нужно доверять глобальным переменным, при включенном в php.ini режиме register_globals злоумышленник может подменить значение глобальной переменной. Используйте ассоциативные массивы $HTTP_GET_VARS и $HTTP_POST_VARS с выключенным register_globals и в начале скрипта явно инициализируйте все глобальные переменные.
Определяйте местонахождение закаченного файла только через is_uploaded_file() или используя move_uploaded_file(), но не доверяйте глобальной переменной с путем к закаченному файлу, значение которой злоумышленник может подменить.
Используйте функции htmlspecialchars(), htmlentities() для экранирования HTML тэгов присутствующих в данных полученных от пользователя.
Защищайте библиотеки функций от просмотра их исходных текстов пользователем (расширения .inc, .class). Решение: снабжайте библиотеки расширением .php, помещайте в закрытую директорию или настройте хэндлер для парсинга расширения файлов с вашими библиотеками.
Помещайте файлы данных вне дерева файловой системы доступной через web (уровнем ниже htdocs, или "document root") или защищайте директории через .htaccess.
mod_php запускайте в режиме safe_mode.
Проверяйте наличие запрещенных символов в переменные используемых в функциях eval, preg_replace, exec, passthru, system, popen, ``.
При использовании не mod_php, а CGI варианта php.cgi не забывайте, что через php.cgi можно получить доступ к любому файлу в директориях защищенных через .htaccess, так как доступ в этом случае ограничен только для прямых запросов, но не для запросов через CGI скрипт php.cgi.
Прежде чем перейти к описанию интеграции модулей, хотелось бы заметить, что в системе могут быть использованы различные модули, блоки и скрипты, не только из похожих по принципу построения систем, но и совершенно не похожих. Не смотря на то, что оригинальные модули и блоки используют стандартные функции, это не является основным фактором в их работе. В системе могут работать модули, совершенно не используя основные функции ядра. В некоторых случаях потребуются только не большие изменение в коде интегрируемого модуля, блока или скрипта.
В данном примере мы рассмотрим способ ручной интеграции модулей одной из самых популярных систем построения сайтов PHP-Nuke. Программу, написанную специально для нашей системы, для автоматической интеграции модулей PHP-Nuke в SLAED CMS Вы можете скачать на нашем проекте в каталоге файлов.
Прошу учитывать, что старые варианты использования кода в модулях PHP-Nuke могут незначительно отличаться от описанных в данной статье.
1. В самом верху изменяем способ защиты для модулей от стороннего доступа.
Старый вариант: if (!eregi("modules.php", $_SERVER["PHP_SELF"])) {
die ("You can"t access this file directly...");
}
Новый вариант: if (!defined("MODULE_FILE")) {
Header("Location: ../../index.php");
exit;
}
2. Старые модули PHP-Nuke используют соединение с базой по средствам переменной $dbi. Наша система использует соединение с базой по средствам переменной $db, по этой причине необходимо изменить все переменные $dbi на $db.
Меняем все глобальные переменные $dbi в функциях, на новые $db. Если это необходимо, указываем переменную $db как глобальную.
Старый вариант: global $prefix, $dbi;
Новый вариант: global $prefix, $db;
Изменяем структуру запроса в базу данных.
Старый вариант: $result = sql_query("SELECT id, name FROM ".$prefix."_categories WHERE id=$id", $dbi);
Новый вариант: $result = $db->sql_query("SELECT id, name FROM ".$prefix."_categories WHERE id=$id");
Как вы заметили, удалена переменная $dbi в конце запроса и добавлена переменная $db в начале. Это нужно проделать со всеми запросами.
В запросах необходимо изменить:
sql_fetch_array на $db->sql_fetchrow sql_query на $db->sql_query sql_fetch_row на $db->sql_fetchrow sql_num_rows на $db->sql_numrows sql_free_result на $db->sql_freeresult
Если появляются вопросы по поводу запросов или правильности их написания, смотрим файл function/mysql.php
В некоторых модулях используются прямые запросы в базу данных в обход файла классов соединения с базой. В таком варианте запросы не подсчитываются. При желании вы так же можете изменить запросы подобного рода.
В запросах необходимо изменить:
mysql_fetch_array на $db->sql_fetchrow mysql_query на $db->sql_query mysql_fetch_row на $db->sql_fetchrow mysql_num_rows на $db->sql_numrows mysql_free_result на $db->sql_freeresult
В функциях не забываем указывать переменную $db как глобальную.
3. В некоторых модулях производится соединение с файлом конфигурации которое нужно заменить.
Старый вариант: include("config.php");
Новый вариант: include("config/config.php");
4. В некоторых модулях используется переменная основного адреса сайта, которую нужно заменить.
Старый вариант: $nukeurl
Новый вариант: $conf['homeurl']
Не исключено что в последствии возникнет необходимость использования параметров основных конфигураций системы. Для этих целей рекомендуется прописать в глобальные, переменную $conf, отвечающую за основные настройки, которые хранятся в файле config/config_global.php
5. В некоторых модулях используются функции темы OpenTable2() и CloseTable2() которые нужно заменить.
Старый вариант: OpenTable2();
Новый вариант: OpenTable();
Старый вариант: CloseTable2();
Новый вариант: CloseTable();
6. В стандартных модулях в начале скриптов используется соединение с файлом mainfile.php.
Необходимо удалить: require_once("mainfile.php"); или include("mainfile.php");
7. Во всех скриптах нужно произвести поиск и изменить стандартные ссылки modules.php на index.php.
Старый вариант: modules.php
Новый вариант: index.php
8. Во всех скриптах нужно произвести поиск и удалить стандартные цветовые переменные в глобальных, и заменить их в коде.
Старый вариант: bgcolor="$bgcolor1"
Новый вариант: class="bgcolor1"
Старый вариант: bgcolor="$bgcolor2"
Новый вариант: class="bgcolor2"
Старый вариант: bgcolor="$bgcolor3"
Новый вариант: class="bgcolor3"
Старый вариант: bgcolor="$bgcolor4"
Новый вариант: class="bgcolor4"
Если у Вас, на вашем VPS сервере сайт отображается в знаках "????" (Вопросы), то скорее всего у вас не настроена база данных для работы с кирилицей. Настроить её можно через файл /etc/my.cnf
А именно открываем выше упомянутый файл и добавляем строчки в секцию [mysqld]:
Оптимизация MySQL
Оптимизация параметров MySQL позволяет значительно увеличить производительность. Основными параметрами являются key_buffer_size (буфер для работы с ключами и индексами), table_cache и sort_buffer (буфер для сортировки).
Я рекомендую использовать следующие настройки для VPS-сервера с 384 Мб памяти:
При наличии 512 Мб памяти и более, рекомендуется увеличить key_buffer_size до 64M, table_cache до 512М, query_cache_size до 128M.
Примечание:
В версии 3.2 2 имя переменной key_buffer изменено на key_buffer_size, при этом старое имя можно использовать по-прежнему. В литературе встречаются оба варианта.
После применения изменений не забываем перезагрузить MySql:
Чтобы создать собственный блок для сайта, построенного с использованием SLAED, достаточно простейших знаний HTML и PHP, а также соблюдение их синтаксиса. Кроме этого потребуется правильная постановка задачи и внимательность. В данной статье мы рассмотрим варианты ручного создания файловых блоков. В качестве примера ниже приведены коды, созданные для использования на всех версиях системы SLAED.
Для начала необходимо создать файл в директории блоков blocks/ Для того, что бы система идентифицировала данный файл как файловый блок, название файла должно быть такого типа: block-ваше_название.php В самом файле, для вывода информации необходимо использовать переменную $content за место стандартных методов echo или print, это единственная отличительная особенность которую нужно учитывать. Всё остальное реализуется при помощи стандартных методов и функций PHP и HTML. При реализации блоков учитывайте, любой PHP код должен начинаться c <?php и заканчиваться ?>
Ниже мы рассмотрим варианты реализации блоков на примерах реализованных в коде, с комментариями участков.
Пример 1
Пример 2
В примерах ниже мы рассмотрим варианты вывода информации в блок из других файлов.
Для работоспособности примеров:
1. Создаём файл demo.txt в директории blocks/ Директория значения не имеет, файл может находиться на другом сайте. Важно указать точный путь к файлу!
2. В файле напишите произвольный текст на своё усмотрение. Содержание данного файла может быть любым.
В качестве содержание файла demo.txt предлагаю использовать изначальный текст:
Пример 3
Пример 4
После того как файловый блок создан и находится в директории blocks/ необходимо добавить и активировать его в панели администратора системы, в отделе блоков: Панель администратора >> Блоки и баннеры >> Добавить новый блок
Заголовок – Указываем название для блока
Ссылка на канал RSS – Оставляем пустым
Время обновления – Оставляем как есть
Имя файла – Выбираем созданный файловый блок
Содержание – Оставляем пустым
Позиция – Выбираем на своё усмотрение
Отображать блок в модулях - Выбираем на своё усмотрение
Язык - Выбираем на своё усмотрение
Активировать? – Да
Время работы, в днях – 0 без ограничений
После истечения – Если без ограничений, оставляем как есть
Кто это будет видеть? - Выбираем на своё усмотрение
В SLAED CMS реализована и успешно используется универсальная система блоков, которая даёт гибкую возможность их использования. В отличие от стандартных блоков системы (Блоки создаваемые в базе данных, Файловые блоки или HTML Блоки) которые мы можем использовать независимо друг от друга, персонально для каждого модуля системы или контингента посетителей, в желаемом месте, мы имеем свободные, независимые блоки. Данный тип блоков можно использовать в любых местах, шаблонах или модулях системы.
Общие сведения
В системе есть два вида блоков:
- Стандартные (обычные).
- Свободные (fly, плавающие).
Создать новый стандартный блок можно через:
- Панель администратора >> Блоки и баннеры >> Управление блоками >> Добавить новый блок
Стандартные блоки могут размещаться (опция «Позиция»):
- Слева
- По центру вверху
- По центру внизу
- Справа
- Верхний баннер
- Нижний баннер
Стандартный блок может быть включён (опция «Отображать блок в модулях») в одном или в нескольких выбранных модулях, он может отображаться во всех модулях или только на главной страничке сайта.
Вновь созданный стандартный блок можно использовать для вывода RSS-новостей, для чего выбирается соответствующий RSS/RDF файл.
Оформление внешнего вида блоков с помощью шаблонов
Стандартные блоки системы
Файл block-center.html отвечает за верхние центральные блоки.
Файл block-down.html отвечает за нижние центральные блоки.
Файл block-left.html отвечает за левые блоки.
Файл block-right.html отвечает за правые блоки.
Файл block-all.html отвечает за все остальные блоки, которые могут использоваться отдельно от стандартных.
Можно создать уникальное оформление для любого блока, находящегося в директории blocks/ (block-name.php; name - это имя блока). В директории templates/ваша_тема/ создаём файл шаблона с именем block-name.html. В этом шаблоне делаем уникальное оформление для блока block-name.php. Пример: нужно сделать уникальное оформление для блока block-voting.php. В этом случае создаём файл шаблона в директории templates/ваша_тема/ с названием block-voting.html. Система найдёт этот файл шаблона автоматически, а затем будет использовать его только для оформления блока block-voting.php.
Стандартные блоки имеют более высокий приоритет, чем свободные блоки, поэтому если в свободном блоке отмечено чтобы он отображался хотя бы в одном модуле или в нескольких модулях или во всех модулях или на главной страничке сайта, то такой блок автоматически превращается в стандартный несмотря на то, что он отмечен как «Свободный блок» (fly block).
Свободные блоки системы
Свободный блок (fly) можно разместить в любом месте странички сайта, для чего требуется вставить код формирования этого свободного блока в соответствующий php-файл (в config/config_header.php, например). В шаблоны тем оформления (файлы *.html) нельзя вставлять код формирования свободного блока, так как в этом случае этот php-код не будет обрабатываться.
Свободный блок описывается в php-скрипте функцией: blocks("why", "who");
blocks - функция создания свободного блока с параметрами: why и who.
В зависимости от параметров why и who функция создания свободного блока может:
- Печатать на стандартный вывод сформированный свободный блок (выводить блок на страничку).
- Возвращать строку со сформированным свободным блоком (вывод блока в переменную для последующей вставки этого блока в html-шаблон).
При этом этот свободный блок может быть с оформлением или без него - это зависит от параметров why.
Значение параметров why
none (выводит тело блока на страничку без оформления)
$fly_block_1_1 = blocks("none", 15);
$fly_block_1_2 = blocks("none", "block-menu2.php");
standart (выводит тело блока на страничку с оформлением)
$fly_block_2_1 = blocks("standart", 15);
$fly_block_2_2 = blocks("standart", "block-menu2.php");
plzreturn (выводит тело блока в переменную без вывода на страничку и без оформления)
$fly_block_3_1 = blocks("plzreturn", 15);
$fly_block_3_2 = blocks("plzreturn", "block-menu2.php");
oreturnform (тело блока в переменную без вывода на страничку, но с оформлением)
$fly_block_4_1 = blocks("oreturnform", 15);
$fly_block_4_1 = blocks("oreturnform", "block-menu2.php");
* 15 - Это bid, номер блока в базе данных (Номер блока можно посмотреть в панели администратора в строке №).
Значение параметров who
bid блока (номер блока в базе данных; таблица slaed_blocks, поле bid; это так называемый без файловый блок, то есть код этого блока находится не в php-файле в директории blocks, а в базе данных в таблице slaed_blocks в поле content)
$fly_block_5_1 = blocks("none", 15);
$fly_block_5_2 = blocks("standart", 15);
$fly_block_5_3 = blocks("plzreturn", 15);
$fly_block_5_4 = blocks("oreturnform", 15);
block-name.php (имя php-файла блока; name - это имя блока)
$fly_block_6_1 = blocks("none", "block-menu2.php");
$fly_block_6_2 = blocks("standart", "block-menu2.php");
$fly_block_6_3 = blocks("plzreturn", "block-menu2.php");
$fly_block_6_4 = blocks("oreturnform", "block-menu2.php");
Чтобы пользоваться созданным свободным блоком нужно, чтобы этот блок был активным. На этом блоке должна быть только одна отметка - «Свободный блок», в противном случае этот блок будет стандартным.
Для формирования эксклюзивного оформления для свободного блока нужно создать файл шаблона этого блока с именем:
- fly-block-15.html (15 - это номер блока в базе данных (таблица slaed_blocks, поле bid));
- fly-block-name.html (name - это имя блока).
Пример 1
Нужно создать свободный блок с параметрами:
- Вывод тела свободного блока на страничку.
- Без оформления.
- По номеру блока в базе данных.
- C использованием имени блока.
Пример 2
Нужно создать свободный блок с параметрами:
- Вывод тела свободного блока на страничку.
- С оформлением.
- По номеру блока в базе данных.
- С использованием имени блока:
Пример 3
Нужно создать свободный блок с параметрами:
- Вывод тела свободного блока в переменную.
- Без оформления.
- По номеру блока в базе данных
- С использованием имени блока:
Пример 4
Нужно создать свободный блок с параметрами:
- Вывод тела свободного блока в переменную.
- С оформлением.
- По номеру блока в базе данных.
- С использованием имени блока.
Для вывода на страничку переменной, содержащей в себе тело свободного блока, нужно сделать следующее:
Открываем файл config/config_header.php и в него вставляем код:
В любое место шаблона (в templates/ваша_тема/index.html, например) вставляем массив $BlockGlob[menu2] (Обратите внимание на отсутствие кавычек внутри квадратных скобок!) На страничку вместо $BlockGlob[menu2] будет выведен блок menu2, код которого содержится в файле blocks/block-menu2.php.
Для корректного вывода на страничку свободного блока, который из базы данных запрашивается по bid из таблицы slaed_blocks, при включённом модуле rss_info (вывод новостей в формате RSS) нужно в php-файл config/config_header.php записать:
Свободный блок может выводиться на странички сайта на всём сайте, если его код встроен в тему оформления, или он может выводиться в каком-то определённом модуле, если его код встроен в код этого модуля.
Свободный блок не может быть обработан системой как стандартный блок, но стандартный блок может быть обработан системой как свободный блок. Пример: блок modules, имеющий bid 1 (таблица slaed_blocks), можно вывести на страничку ещё раз как свободный блок, и тогда на этот блок накладываются все те ограничения, которые наложены на блок modules (показывать только на главной страничке сайта или только в одном модуле или в выбранных модулях или во всех модулях).
Использование уникального стиля оформления для блоков
Стандартные блоки
1) Если существует эксклюзивное оформление для блока block-name.php, то применяется оно. Оформление для блока берётся из:
- Файла templates/ваша_тема/block-name.html по имени блока (name).
- Из файла templates/ваша_тема/block-15.html, где 15 - это номер блока (поле bid в таблице slaed_blocks).
2) Если существует оформление для верхних/нижних или левых/правых блоков, то применяется оно. Оформление для блока берётся из:
3) Если не существуют шаблоны, описанные в п. 1) и п. 2), то для оформления блока применяется шаблон templates/ваша_тема/block-all.html.
4) Если шаблон templates/ваша_тема/block-all.html отсутствует, то применяется встроенное оформление блоков (файл function/template.php):
Тэги fieldset и legend описаны в стилевом файле templates/ваша_тема/style.css.
Свободные (fly) блоки
1) Если существует эксклюзивное оформление для свободного блока fly-block-name.php, то применяется оно. Оформление для блока берётся из:
- Файла templates/ваша_тема/fly-block-name.html по имени блока (name).
- Из файла templates/ваша_тема/fly-block-15.html, где 15 - это номер блока (поле bid в таблице slaed_blocks).
2) Если существует общее для всех свободных блоков оформление (файл шаблона templates/ваша_тема/fly-block.html), то применяется оно.
3) Если не существуют п. 1) или п. 2), то применяется файл шаблона templates/ваша_тема/block-all.html.
4) Если шаблон templates/ваша_тема/block-all.html отсутствует, то применяет встроенное оформление блоков (файл function/template.php):
Тэги fieldset и legend описаны в стилевом файле templates/ваша_тема/style.css.
Чем меньше используется уникальных стилей (шаблонов) оформления для блоков, тем быстрее формируется и выдаётся пользователю страничка вашего сайта.
Прежде чем перейти к описанию интеграции модулей, хотелось бы заметить, что в системе могут быть использованы различные модули, блоки и скрипты, не только из похожих по принципу построения систем, но и совершенно не похожих. Не смотря на то, что оригинальные модули и блоки используют стандартные функции, это не является основным фактором в их работе. В системе могут работать модули, совершенно не используя основные функции ядра. В некоторых случаях потребуются только не большие изменение в коде интегрируемого модуля, блока или скрипта.
В данном примере мы рассмотрим способ ручной интеграции модулей одной из самых популярных систем построения сайтов PHP-Nuke. Программу, написанную специально для нашей системы, для автоматической интеграции модулей PHP-Nuke в SLAED Вы можете скачать на нашем проекте в каталоге файлов.
Прошу учитывать, что старые варианты использования кода в модулях PHP-Nuke могут незначительно отличаться от описанных в данной статье.
1. В самом верху изменяем способ защиты для модулей от стороннего доступа.
Старый вариант: if (!eregi("modules.php", $_SERVER["PHP_SELF"])) {
die ("You can"t access this file directly...");
}
Новый вариант: if (!defined("MODULE_FILE")) {
Header("Location: ../../index.php");
exit;
}
2. Старые модули PHP-Nuke используют соединение с базой по средствам переменной $dbi. Наша система использует соединение с базой по средствам переменной $db, по этой причине необходимо изменить все переменные $dbi на $db.
Меняем все глобальные переменные $dbi в функциях, на новые $db. Если это необходимо, указываем переменную $db как глобальную.
Старый вариант: global $prefix, $dbi;
Новый вариант: global $prefix, $db;
Изменяем структуру запроса в базу данных.
Старый вариант: $result = sql_query("SELECT id, name FROM ".$prefix."_categories WHERE id=$id", $dbi);
Новый вариант: $result = $db->sql_query("SELECT id, name FROM ".$prefix."_categories WHERE id=$id");
Как вы заметили, удалена переменная $dbi в конце запроса и добавлена переменная $db в начале. Это нужно проделать со всеми запросами.
В запросах необходимо изменить:
sql_fetch_array на $db->sql_fetchrow sql_query на $db->sql_query sql_fetch_row на $db->sql_fetchrow sql_num_rows на $db->sql_numrows sql_free_result на $db->sql_freeresult
Если появляются вопросы по поводу запросов или правильности их написания, смотрим файл function/mysql.php
В некоторых модулях используются прямые запросы в базу данных в обход файла классов соединения с базой. В таком варианте запросы не подсчитываются. При желании вы так же можете изменить запросы подобного рода.
В запросах необходимо изменить:
mysql_fetch_array на $db->sql_fetchrow mysql_query на $db->sql_query mysql_fetch_row на $db->sql_fetchrow mysql_num_rows на $db->sql_numrows mysql_free_result на $db->sql_freeresult
В функциях не забываем указывать переменную $db как глобальную.
3. В некоторых модулях производится соединение с файлом конфигурации которое нужно заменить.
Старый вариант: include("config.php");
Новый вариант: include("config/config.php");
4. В некоторых модулях используется переменная основного адреса сайта, которую нужно заменить.
Старый вариант: $nukeurl
Новый вариант: $conf['homeurl']
Не исключено что в последствии возникнет необходимость использования параметров основных конфигураций системы. Для этих целей рекомендуется прописать в глобальные, переменную $conf, отвечающую за основные настройки, которые хранятся в файле config/config_global.php
5. В некоторых модулях используются функции темы OpenTable() и CloseTable() которые нужно заменить.
Старый вариант: OpenTable(); или OpenTable2();
Новый вариант: open();
Старый вариант: CloseTable(); или CloseTable2();
Новый вариант: close();
6. В стандартных модулях в начале скриптов используется соединение с файлом mainfile.php.
Необходимо удалить: require_once("mainfile.php"); или include("mainfile.php");
7. Во всех скриптах нужно произвести поиск и изменить стандартные ссылки modules.php на index.php.
Старый вариант: modules.php
Новый вариант: index.php
8. Во всех скриптах нужно произвести поиск и удалить стандартные цветовые переменные в глобальных, и заменить их в коде.
Старый вариант: bgcolor="$bgcolor1"
Новый вариант: class="bgcolor1"
Старый вариант: bgcolor="$bgcolor2"
Новый вариант: class="bgcolor2"
Старый вариант: bgcolor="$bgcolor3"
Новый вариант: class="bgcolor3"
Старый вариант: bgcolor="$bgcolor4"
Новый вариант: class="bgcolor4"
В прошлой главе мы познакомились с основами модуля mod_rewrite. В примере, который был рассмотрен, мы использовали конструкцию, которая в буквальном смысле означает следующее: «Если кто-то пытается получить доступ к файлу .htaccess, выдается ошибка, сообщающая, что доступ к файлу запрещен».
Это «правило» глобально, то есть каждый получит указанное сообщение об ошибке. Напомню, что mod_rewrite является модулем, который предоставляет «основанный на правилах механизм динамического изменения запрашиваемых URL-ов».
Мы можем ограничивать «правило» при помощи различных «условий правила». «Правило» будет выполнено только в том случае, если перед ним будет встречен ряд условий.
Синтаксис: условие должно предшествовать правилу!
Возьмем еще один пример (запись в файле .htaccess):
Назначение первых трех записей было подробно разобрано в первой части публикации. Их функция - включение «движка перезаписи», то есть самого модуля.
Последние две строки запрещают доступ поисковому роботу под кодовым названием «EmailSiphon» (имеется ввиду имя юзер-агента). Данный робот является сборщиком почтовых адресов с различных веб страниц.
Проверочная строка – переменная сервера, которая может быть записана в общей форме: «% {ИМЯ_ПЕРЕМЕННОЙ}».
Образец условия – регулярное выражение. Для более полного понимания темы стоит рассмотреть регулярные выражения как класс.
Регулярные выражения – это механизм, позволяющий задать шаблон для строки и осуществить поиск данных, соответствующих этому шаблону в заданном тексте. Кроме того, дополнительные функции по работе с такими выражениями позволяют получить найденные данные в виде массива строк, произвести замену в тексте по шаблону, разбиение строки по шаблону и т.п. Однако главной их функцией, на которой основаны все остальные, является именно функция поиска в тексте данных, соответствующих шаблону (образцу), описанному в синтаксисе регулярных выражений.
Регулярные выражения подобны маленькому, компактному языку программирования со своими правилами.
Например, регулярное выражение:
заменит строку «abc», на строку «xyz» во всем тексте.
Вот краткий обзор наиболее важных элементов с некоторыми примерами:
. (точка) - текст (любой символ)
| - чередование (то есть/abc|def/)
* - квантификатор (разрешено любое число)
^ $ - якоря строки
s - оператор (string1 заменить на string2)
g - модификатор (искать по всему тексту)
Регулярные выражения конструируются с помощью этих элементов и других «обычных» символов. Они не являются отдельным языком, а используются другими средствами, например языками программирования типа Perl или PHP, а также текстовыми редакторами (Emacs).
Если говорить о связи регулярных выражений и модуля mod_rewrite, то они используются в директивах RewriteRule и RewriteCond.
«^» обозначает начало строки. Из этого следует, что UserAgent должен начинаться со строки «EmailSiphon» и ни с чего другого («NewEmailSiphon», например, не работал бы).
Но, поскольку данное регулярное выражение не содержит символ "$" (якорь конца строки), UserAgent мог бы быть, например, «EmailSiphon2».
Последняя строка нашего примера:
определяет, что именно нужно делать, когда робот запросит доступ.
Регулярное выражение «^.*$» означает: «Доступ ко всем файлам запрещен».
Точка «.» в регулярном выражении – мета символ (подстановочный знак), означающий любой случайный символ.
«*» означает то, что строка может встречаться неограниченное количество раз. В этом случае, независимо от имени запрошенного файла, будет выдана ошибка.
«EmailSiphon», конечно, не единственный почтовый сборщик. Другой известный член этого семейства - «ExtractorPro». Допустим мы хотим запретить доступ и этому роботу. В таком случае нам необходимо еще одно условие.
Теперь файл .htaccess будет выглядеть так:
Третий аргумент [OR] (в первой строке RewriteCond) называется «флагом». Существуют два возможных флага:
NC – не учитывать регистр букв.
OR – означает «или следующее условие».
Флажок NC позволяет игнорировать регистр букв в искомом образце. Например:
Эта строка определяет, что и "emailsiphon" и "EmailSiphon" будут признаны как идентичные выражения.
Вы можете использовать сразу несколько флажков, разделяя их запятыми.
Нет никаких ограничений по числу условий. Таким образом, Вы можете блокировать 10, 100, 1000 или более известных почтовых сборщиков. Определение этих 1000 условий – просто вопрос загрузки сервера и прозрачности файла «.htaccess».
В вышеупомянутом примере используется глобальная переменная «HTTP_USER_AGENT». Существуют также другие переменные: REMOTE_HOST, REMOTE_ADDR
Например, если Вы хотите заблокировать паука пришедшего с www.site.ru, Вы можете использовать глобальную переменную «REMOTE_HOST» таким образом:
Если Вы хотите заблокировать определенный IP адрес, условие будет выглядеть так:
В регулярном выражении по проверке точного и полного IP адреса нужно использовать начальные и конечные якоря.
Также можно исключить целый диапазон:
Этот пример показывает, как можно заблокировать диапазон IP адресов с 212.37.64.0 по 212.37.64.255.
А вот маленькая задачка для проверки приобретенных знаний (решение будет дано в следующей части):
Внимание, вопрос!
Если мы пишем в регулярном выражении «^212.37.64» вместо «^212.37.64.» (с точкой в конце), то даст ли это тот же самый эффект, и будут ли исключены те же самые IP адреса?
До сих пор мы использовали простой RewriteRule, который генерирует сообщение об ошибках. В третьей части публикации мы проанализируем, как можно использовать RewriteRule для переадресации посетителей к определенным файлам.