Немного о портальном движке PHP-Fusion
В конце темы вы найдете ссылки на скачку модов данного движка и установочного файла самого движка.
Как убрать редирект с сайта на index.php.
Для этого необходимо править index.php в корне сайта. Это делается следующим образом. Открыть данный файл нажатием клавиши F4 и вставить следующее:
<?php
require_once "maincore.php";
require_once "subheader.php";
require_once "news.php";
require_once "side_left.php";
require_once "side_right.php";
require_once "footer.php";
?>
Адаптация темы.
В данный момент отличие тем адаптированных для RU.PHP-Fusion от "обычных" тем состоит только в том, что в адаптированных темах корректно склоняются слова "просмотр", комментарий", "уникальный визит" в зависимости от соответсвующего числового параметра. Действие этих изменений распространяется только на новости, статьи и нижнюю часть сайта (footer). Корректное отображение аналогичных надписей в панелях плагинов регулируется не темой, а кодом плагина. Динамические заголовки не имеют отношения к темам.
Ситуация такова: старые темы работают и в RU., и в "классике" одинаково успешно, но не обрабатывают при этом склонения, надписи выглядят по старому. Темы адаптированные для RU. НЕ будут работать в классике. Будут появляться сообщения об ошибках.
Темы, использующие в полной мере не так давно анонсированный Диджитаниумом "упрощенный" движок тем, не требуют никаких доработок для применения в RU., начинают работать сразу после установки.
Темы НЕ использующие нововведения должны быть адаптированы для работы с RU. следующим образом:
В файле theme.php найдите следующие (или похожие) фрагменты:
в функции render_news():
.$info['news_comments'].$locale['043'].
.$info['news_reads'].$locale['044'].
в функции render_article():
$info['article_comments'].$locale['043'].
.$info['article_reads'].$locale['044'].
в функции render_footer():
($settings['counter'] == 1 ? $locale['140']."\n" : $locale['141']."\n")
Исправьте их следующим образом:
в функции render_news():
.$info['news_comments'].$locale['043'.ru_postfix($info['news_comments'])].
.$info['news_reads'].$locale['044'.ru_postfix($info['news_reads'])].
в функции render_article():
$info['article_comments'].$locale['043'.ru_postfix($info['article_comments'])].
.$info['article_reads'].$locale['044'.ru_postfix($info['article_reads'])].
в функции render_footer():
$locale['141'.ru_postfix($settings['counter'] )]."\n"
Будьте внимательны, постарайтесь понять, что именно вы делаете, а не пытайтесь слепо копировать код. После этого тема заработает, если, конечно, у Вас уже установлена RU.PHP-Fusion с ее специальными файлами локализации (входят в дистрибутив).
И самое последнее, если у Вас все получится, то, пожалуйста, не сочтите за труд найти в файле theme.php кусок вроде этого:
Powered by <a href='http://www.php-fusion.co.uk' target='_blank'>
и замените, в соответствии с GNU/GPL, на такой:
Создано на базе <a href='http://php-fusion.int.ru/' target='_blank'>русской версии</a> <a href='http://www.php-fusion.co.uk' target='_blank'>
Если Вы не можете обнаружить в файле theme.php ничего похожего на описанные фрагменты, то, скорее всего, Ваша тема - тема "нового поколения" и не требует доработок.
Иконка в адресной строке браузера
Прежде всего следует обзавестись, собственно иконкой. В ее качестве может выступать любой файл типа .ICO стандартного размера 32х32 пикселей. Можете где-нибудь стырить, или, что более почетно изготовить самостоятельно. Далее, для простоты переименуем этот файл в "favicon.ico".
Затем, готовый файлик закачиваем в корневую директорию Вашего сайта (туда, где лежат файлы subheader.php, maincore.php и др.). После этого некоторые браузеры (такие как Internet Explorer) уже начнут "видеть" Вашу иконку.
Однако, этого недостаточно. Для полноты эффекта внесем изменения в файл subheader.php. Найдем этот файл среди прочих (там же, в корне сайта), посмотрим на его содержимое и добавим в него строчку выделенную красным цветом:
<?php
/*---------------------------------------------------+
| PHP-Fusion 6 Content Management System
+----------------------------------------------------+
| Copyright © 2002 - 2005 Nick Jones
| http://www.php-fusion.co.uk/
+----------------------------------------------------+
| Released under the terms & conditions of v2 of the
| GNU General Public License. For details refer to
| the included gpl.txt file or visit http://gnu.org
+----------------------------------------------------*/
if (!defined("IN_FUSION")) { header("Location: index.php"); exit; }
require_once THEME."theme.php";
if ($settings['maintenance'] == "1" && !iADMIN) fallback(BASEDIR."maintenance.php");
if (iMEMBER) $result = dbquery("UPDATE ".$db_prefix."users SET user_lastvisit='".time()."', user_ip='".USER_IP."' WHERE user_id='".$userdata['user_id']."'");
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html>
<head>
<title>".$settings['sitename']."</title>
<meta http-equiv='Content-Type' content='text/html; charset=".$locale['charset']."'>
<meta name='description' content='".$settings['description']."'>
<meta name='keywords' content='".$settings['keywords']."'>
<link rel='shortcut icon' href='".BASEDIR."favicon.ico'>
<link rel='stylesheet' href='".THEME."styles.css' type='text/css'>
<script type='text/javascript' src='".INCLUDES."jscript.js'>
</head>
<body bgcolor='$body_bg' text='$body_text'>\n";
render_header("<img src='".BASEDIR.$settings['sitebanner']."' alt='".$settings['sitename']."' title='".$settings['sitename']."'>");
?>
Затем, сохраним файл subheader.php и (если работы выполнялись в оффлайне) закачаем его на сервер, поверх уже имеющегося.
Как вывести на страницу количество запросов к базе данных
В корневой директории сайта найдем файлик maincore.php и добавим в его начало строчку, выделенную красным:
if (eregi("maincore.php", $_SERVER['PHP_SELF'])) die();
$q_num = 0;
// If register_globals is turned off, extract super globals (php 4.2.0+)
if (ini_get('register_globals') != 1) {
$supers = array("_REQUEST","_ENV","_SERVER","_POST","_GET","_COOKIE","_SESSION","_FILES","_GLOBALS");
foreach ($supers as $__s) {
if ((isset($$__s) == true) && (is_array($$__s) == true)) extract($$__s, EXTR_OVERWRITE);
}
unset($supers);
}
Затем, в этом же файле найдем две функции (dbquery() и dbcount()) и перепишем их так:
function dbquery($query) {
global $q_num;
$q_num++;
if (!$query = mysql_query($query)) echo mysql_error();
return $query;
}
function dbcount($field,$table,$conditions="") {
global $q_num;
$q_num++;
$cond = ($conditions ? " WHERE ".$conditions : "");
if (!$query = mysql_query("SELECT Count".$field." FROM ".DB_PREFIX.$table.$cond)) {
echo mysql_error();
} else {
$rows = mysql_result($query, 0); return $rows;
}
}
Это функции ядра через которые PHP-Fusion выполняет все свои запросы к базе данных.
Осталось вывести результаты. Для этого найдем там же, в корне сайта, файл footer.php и добавим в него следующую строчку (отмечена красным):
render_footer(false);
echo "\n<br>Количество запросов: ".$q_num."<br>\n";
echo "</body>
</html>\n";
Все. Сохраняем файлы и загружаем их на сервер поверх имеющихся (если вы работали в оффлайне).
Последнее изменение надо бы, по-культурному, внести не в футер, а в тему, в функцию render_footer(), но можно и так оставить.
И еще: здесь считается количество не ЗАПРОСОВ, а вызовов функций dbquery() и dbcount(), что для сайта с корректно написаными (или отсутвующими) модами и плагинами одно и тоже. Но если у Вас есть какя-то самодельная дописка, которая обращается к базе не через эти функции ядра, а самостоятельно, через mysql_query(), то ее запросы НЕ посчитаются. Надо в код такой самоделки, по собственному разумению приписать после каждого запроса $q_num++;, не забывая, что речь идет о глобальной переменной (если запрос встроен в функцию, то надо не забывать дописывать global $q_num;).
Теги Alt и Title в downloads.php
Для "раскрутки" сайта, в угоду поисковикам, не будет лишним изменить download.php так, чтобы в ссылках на файлы присутствовали теги alt и title.
меняем сточку 77 в файле download.php
echo "<td width='30%' class='tbl1'><b>".$locale['415']." ".$data['download_count']."</td>\n<td width='40%' class='tbl2'><a href='".FUSION_SELF."?cat_id=$cat_id&download_id=".$data['download_id']."' target='_blank'>".$locale['416']."</a> (".$data['download_filesize'].")</td>\n</tr>\n";
на вот такую
echo "<td width='30%' class='tbl1'><b>".$locale['415']."</b> ".$data['download_count']."</td>\n<td width='40%' class='tbl2'><a href='".FUSION_SELF."?cat_id=$cat_id&download_id=".$data['download_id']."' title='".$data['download_description']."' alt='".$data['download_title']."' target='_blank'>".$locale['416']."</a> (".$data['download_filesize'].")</td>\n</tr>\n";
Теперь в теге title будет писаться описание файла, а в alt его название.
Размышления о дизайне.
Распространненые заблуждения.
Про дизайнеров.
Если я спрашу вас, кто такой Web-дизайнер, то на ум приходит что-то связанное с оформлением, графикой и.т.п. Зачастую люди думают, что дизайнер только разрабатывает графическое оформление страниц, расположение элементов, меню и.т.д. Но на самом деле правильный Web-дизайнер делает все по определению. С английского глагол design переводится как задумывать, придумывать, разрабатывать; замышлять. Из этого следуют, что Web-дизайнер - это человек, который это делает. Но уже же есть слово Web-мастер, в чем же отличие? Я скажу вам. Никакой.
Когда нанимают на работу Web-дизайнера, то подразумевают графического дизайнера. Поэтому в этом случае дизайнер выполняет только часть своей работы. Во многих случаях это еще и хуже.
Любой уважающий себя дизайнер должен знать Web-стандарты.
Про Web-стандарты.
Сейчас всю большую популярность набирают, так назваемые, Web-стандарты. Так что же это такое?
Web-стандартами называются правила, по которым рекомендуется разрабатывать код страниц. Некое правописание для Web. То есть правописание кода и CSS файлов. Это два валидатора W3C - Косирциума Web разработчиков.
Поддержка Web-стандартов не обязательна, но они дают большую гарантию, что ваш сайт будет отображаться как задуманно в правильных браузерах. Если ваши странички поддерживают Web-стандарты, а у кого-то что-то неправильно отображается, то это уже проблема его браузера (а это скорее всего IE или Opera).
Про браузеры для дизайнеров.
Тестирование сайта в разных браузерах очень важно, так как не все браузеры показывают все одинаково. Давайте рассмотрим типичные браузеры для Web. Как говорится, назови мне свой браузер, и я скажу кто ты есть.
IE - пользователи.
Личности либо малознающие про браузеры любо те, кого в нем все устраивает. Включая дыры, вирусы и трояны, проникающие сквозь этот браузер, а также всплывающие окна (исключение IE 6 SP2, в нем окошки не всплывают).
Плюсы: Идет вместе с Windows.
Минусы: Плохая защита. Плохая поддержка Web-стандартов.
Пользователи Opera.
Любите скорость? Не любите ждать? Оно и видно. Пользователи этого браузера могут гордиться его скоростью. Opera действительно самый быстрый браузер в мире. В большинстве случаев гораздо лучше IE, но поддержка Web-стандартов могла быть и лучше. Несчитаю вечных проблем с POST и GET (Кто сталкивался, поймут). Вообщем, его можно использовать, но полного удовольствия от серфинга вы не получите.
Плюсы: Отличная скорость.
Минусы: Неполная поодержка Web-стандартов. POST и GET.
Netscape.
Определенно лучше предшественников. Мною использовался не очень долго, но за это время браузер мне очень понравился.Очень хорошая поддержка Web-стандартов. Отличный браузер для повседневного использования. Определенный минус - размер дистрибутива. Пользователи, сидящие на Dial-UP и слабеньком ISDN должны будут подождать прилично, прежде загрузят это удовольствие.
Плюсы: Очень хорошая защита и поодержка Web-стандартов.
Минусы: Довольно большой размер дистрибутива.
Mozilla Suite.
Это целый комплект программ для работы с Web. В него входят прекрасный браузер на движке Gecko, хороший почтовый клиент, редактор HTML кода и IRC чат. Неплохо, правда? Опять таки, большой дистрибутив для медленный подключений. Но он того стоит!
Плюсы: Прекрасный набор для работы с Web. Отличная поддержка Web-стандартов.
Минусы: Довольно большой размер дистрибутива.
Mozilla Firefox.
Вот мы и добрались до самого интересного. Firefox представляет собой браузер, вырезанный из Mozilla Suite и многократно улучшенный. Браузер основывается на Open Source движке Gecko, что означает быстрый выпуск заплаток и превосходную работу. Firefox отлично справляется с работой браузеры. Отличная поддержка Web-стандартов. Плюс, огромное колисество модов, упрощающих работу дизайнера и просто жизнь юзера. Забудьте про кучу окон IE. В Firefox реализована функция Tabbed Browsing, помогающая открыть все нужные странички в одном окне.
Плюсы: Отличная поддержка Web-стандартов. Безопасный и быстрый движок. Множество полезный дополнений. Небольшой дистрибутив.
Минусы: Неудобств в работе не замечено.
Вывод статьи. Учите Web-стандарты. Пользуйтесь правильными браузерами. Любите Open Source.
Как устроены темы оформления сайта для PHP-Fusion
Общая схема сайта
Начнем с самой общей информации: сайт на основе PHP-Fusion состоит из пяти основных частей: заголовка (header), левой и правой части (left & right side), подвала (footer) и центральной части, находящейся по середине между четырьмя остальными.
В состав заголовка входит все, что вы видите на странице от самого верха и до строчки со ссылками и датой, включительно. Подвал это пространство внизу сайта, где содержатся копирайты и встроенный счетчик. Левая и правая часть - это узкие квертикальные колонки по бокам, содержащие панели, (Небольшие таблички сходного вида, но каждая со своим заголовком, содержимым и предназначением. Например панель "Навигация", панель "Мини-чат") расположенные одна под другой.
Надо заметить, что эти колонки существуют постольку, поскольку существуют панели расположенные в них. Как вы знаете, администратор может удалять, добавлять панели, временно отключать видимость и регулировать доступ к панелям для разных групп пользователей. Так вот если администратор отключит все панели правой колонки, то колонка, как бы, исчезнет (безо всякого вмешательства в программный код!). Или еще пример: допустим, в левой колонке администратор расположил только панели с доступом "пользователь". Тогда незарегистрированный гость увидит сайт с одной (правой) колонкой и не даже не будет подозревать, что зарегистрированный пользователь видит этот сайт с двумя колонками.
Из чего состоит тема
Каждая тема для сайта на основе PHP-Fusion представляет собой отдельную папку, расположеную в папке themеs. Название папки задает одновременно и название темы, которое открывается в списке выбора тем в "главных настройках" и в пользовательском профиле. Например присутствие на вашем сайте папки themes/Similitude приводит к появлению в этом списке темы "Similitude", если вы создадите папку themes/My_Theme, в этот список добавится тема "My_Theme". Но, как вы догадываетесь, просто создать папку недостаточно. Нужно ее чем-то наполнить. Чем же?
Внутри папки с вашей темой обязательно должен находиться файл theme.php, это главный файл темы. В принципе, можно этим и ограничиться, но обычно в этой папке лежит еще файл style.css, папки images и forum. Мы еще вернемся к этим файлам и папкам, а пока просто скажем, что style.css содержит определения стилей (внешнего вида элементов сайта), в папке images лежат графические файлы используемые в дизайне (всякие точечки, квадратики, фоны, распорки для таблиц), в папке forum лежат графические изображения кнопок форума ("new thread", "edit" и т.д.).
Мы сказали, что theme.php - главный файл темы, почему мы его так назвали и что внем должно находиться мы скоро увидим, а пока разебермся, как движок работает с темой.
Как движок работает с темой
Основная задача движка - вывести из базы данных некую информацию на страничку, задача темы при этом - обеспечить желаемый внешний вид этого вывода. Как мы уже видели, сайт на PHP-Fusion имеет блочную структуру. Есть два больших блока имеющих самостоятельное устройство заголовок и подвал. И есть левая/правая колонки, а так же центр, содержание и вид которых определяется наличием, внешним видом и содержанием более мелких блоков.
Что я имею в виду? Обратите внимание: заголовок и подвал выглядят одинаково на всех страницах сайта, а содержимое центра, естественно изменяется. Хотя левая и правая колонки тоже обычно одинаковы на всех страницах, но тем не менее мы легко можем изменить их содержимое, убрав или добавив панель. Если присмотреться, можно увидеть, что панели живут не только в боковых колонках, что в центральной части содержимое тоже обычно заключено в панели. Или таблицы.
Основной принцип устройства HTML состоит в том, что существую теги открывающие (<table>) и закрывающие (</table>). Идея темы состоит в дальнейшем развитии этого принципа: мы выделяем фрагмент HTML-кода образущий начало целого блока (например: "<table><tr><td>") и фрагмент закрывающего кода: "</td><tr></table>", а между ними можем разместить любое содержимое. В данном случае получается простая таблица с одной ячейкой.
Теперь ответим на главный вопрос этой части, как же движок работает с темой?
В общем случае это выглядит так: сначала движок вызывает функцию, написанную на языке PHP, которая "рисует" начало блока (HTML-код), затем движок выводит содержимое данного блока а затем вызывает функцию "рисования" завершающей части блока. Впрочем, некоторые функции самостоятельно рисуют и начало, и конец, и встраивают содержимое в середину. Главное, что этими функциями создается обрамление для содержимого страницы или отдельного блока.
Откуда же движок знает, что и когда ему рисовать? Ответ на этот вопрос раскроет нам и тайну содержимого файла theme.php.
Содержимое theme.php
Все функции, отвечающие за "рисование" элементов оформления сайта находятся в файле theme.php. Именно оттуда, по мере надобности, движок вызвает эти функции. В настоящий момент этих функци всего 11. Во всех темах они имеют одинаковые названия и ОБЯЗАТЕЛЬНО, все 11 штук, должны быть описаны в файле theme.php. Об их назначени можно судить по их названиям, так что сложностей возникать не должно. Вот эти 11 функций:
function render_header($header_content) - эта функция рисует заголовок сайта. Она вызывается из файла (если вам это интересно) subheader.php, где в качестве параметра ей передается код логотипа сайта. Если хотие изменить внешний вид шапки, надо изменить эту функцию в файле theme.php, если хотите вместо логотипа выводить что-то другое, или добавить в шапку код банера - изменяйте параметр вызова данной функции в subheader.php.
function render_footer($license=false) - эта функция выводит подвал сайта, со всеми копирайтам, счетчиками и прочим.
function render_news($subject, $news, $info) - определяет внешний вид каждой новости, грубо говоря - рисует вокруг текста новости таблицу, код которой задается в тексте функции и пририсовывает строчку "автор", "дата", "просмотры" и все такое.
function render_article($subject, $article, $info) - делает в точности то же самое, но для статей (отсюда вывод - статьи могут внешне достаточно сильно отличаться от новостей!).
function openside($title) - выводит открывающую, верхнюю часть панели (прямоугольного блока, размещаемого (обычно, но не только) в боковых колонках. В качестве $title передается заголовок панели.
function closeside() завершает панель, начатую предыдущей функцией. Между вызовами функция выводится содержимое панели.
Для понимания применения этих двух функций, попытайтесь из Панели админинстратора создать новую панель и посмотрите на предложенный вам шаблон кода.
function opensidex($title,$state="on") и
function closesidex() - делают то же самое, что две предыдущие функции, только панель получается хитрая - она может закрываться и раскрываться. Если при вызове функции в качестве второго параметра передается строка "on", панель будет изначально открыта, если "off" - закрыта. ОБратите внимание функции должны обязательно использоваться попарно. То есть если вызывается openside(), то в конце обязательно надо вызвать closeside(), если opensidex(), то в конце - closesidex().
function opentable($title) и
function closetable() начинают и завершают таблицу в которую обычно помещается ВСЕ содержимое центральной части. На Ваших собственных страницах никто не мешает вам использовать любое количество попарных вызовов этих функций для формирования смысловых блоков. В этом случае пригодится последняя функция:
function tablebreak() - код выводимый этой функцией разделяет блоки сайта (обычно выводя между ними пустую таблицу, отсюда и название).
Краткое обобщение
Итак, мы рассмотрели все 11 функций файла themes.php. Для тех кто не врубился: именно эти функции рисуют на странице все элементы дизайна. Дизайнерский код прописан прямо в этих функциях и выводится оператором PHP echo.
Движок на основных страницах, существующих на сайте сразу после установки, вызывает эти функции самостоятельно. Если вы создаете свою собственную страницу или панельку, об их вызове Вы должны позаботиться сами.
Дальше