Меню для псевдостатики
Вариант сборки меню для псевдостатических URL по алгоритму ничем не отличается от сборки меню без трансляции. Тот же проход в цикле по массиву выбранных разделов и сборка строк ссылок. Единственная разница – в качестве URL указывается не главный скрипт с параметром, а алиас раздела, к которому присоединяется расширение. Расширение, как вы помните, хранится в файле конфигурации (переменная $_ext).
Функция сборки меню называется по-прежнему getmenu(). Ее нужно разместить в файле m_static.inc.php в директории /libs
<?php function getmenu($var) { global $_ext; $menu=array(); foreach ($var as $key=>$val) { if (((int)$val['some'] & 1) == 0) { if (((int)$val['some'] & 16) > 0) $href='"'.$val['knot'].'"'; else $href=($val['knot']!='/' ? '"'.$val['knot'].$_ext.'"':'"/"'); $menu[]='<a href='.$href.'>'.$val['name'].'</a>'; } } return ($menu); } ?>
Итак, вся разница между режимами трансляции URL в том, что ссылка на раздел с алиасом alias имеет вид:
- реальная ссылка: main.php?id=alias
- псевдостатическая: alias.html
Естественно, чтобы движок мог нормально работать, центральный скрипт должен получить вызов по реальной ссылке. Преобразованием займется модуль сервера mod_rewrite. Для этого, включая режим трансляции URL, нам нужно задать правила трансляции в файле .htaccess корневой директории сайта.
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([a-z0-9]+).html$ main.php?id=$1 [L]
Первая директива дает указание серверу включить механизм трансляции URL. В большинстве случаев он включен по умолчанию, но бывает и выключен. Вторая назначает базу трансляции URL от корневой директории сайта. Третья – условие трансляции («если запрошенный файл не существует»). Преобразование должно выполняться только в том случае, если в корне нет файла с тем же именем. Четвертая представляет собой правило преобразования, которое предписывает вместо строки вызова alias.html передать в обработку main.php?id=alias. Правило учитывает, что в алиасе допустимы только символы латинского алфавита в нижнем регистре и цифры. Если в алиасе встретится какой-то иной символ, это правило не сработает, поскольку переданная в обработку строка не совпала с шаблоном.
Разумеется, если в файле конфигурации вы укажете расширение не .html, а какое-то другое, вам нужно исправить и правило трансляции – пропишите в нем другое расширение.