|| разделы:: | |
|| поиск по сайту:: | |
|| реклама:: | |
|| новости почтой:: | |
Популярные статьи |
|
Hot 5 Stories |
|
|| рекомендуем:: |
|
| |
Первые шаги. Действительно легкая смена дизайна.
PHP.Первые шаги. Действительно легкая смена
дизайна.
Предупреждение.
Данный текст ни на что не
претендует. Надеюсь, что-то из описанного поможет
Вам в освоении PHP и использовании его в
повседневной практике.
Сразу оговорюсь, что я не только
мало смыслю в программировании вообще, но и в PHP в
частности. Соответственно и статья писалась для
такой же аудитории. Ламер -ламеру. Или
дилетант-дилетанту, как угодно. Большинство
информации можно найти в форумах или на
англоязычных сайтах.
Краткая аннотация:
После прочтения статьи вы сможете
использовать только один файл для внесения в
него изменений дизайна и навигации. Содержимое
сайта при этом не нужно будет даже трогать!
Легкая смена дизайна
Итак, у вас уже что то есть. Какой
то информационный web проект. Серия статей, он-лайн
книга, просто страничка.
Хорошо, если у вас все в порядке с проектом на
диске. Каждый раздел в своем каталоге, скрипты
отлажены и жужжат, дизайн закреплен навеки.
У меня такого не было.
То есть порядок то был, а вот с
дизайном - полный завал. Плюс я постоянно что то
прикручиваю, балуюсь с содержимым. Что же я
сделал?
Мне надо было : легко и безболезненно менять
дизайн, навигацию, ссылки и баннеры, вставлять
новые разделы и все это должно проходить с
минимальными телодвижениями .
Я вовсю использовал SSI. Вы знаете
что это такое ? Грубо говоря, у меня был шаблон
хтмл, в него я вставлял меняющиеся элемнты типа
меню навигации, баннеров и так далее. Но само
содержание этого уже наполненного шаблона - не
менялось! То есть для каждой странички в шаблон
вставлял информацию, и сохранял на сервере. После
этого, чтобы изменить цвет таблицы, мне пришлось
бы заново делать шаблон, выдергивать информацию
из старого и вставлять в новый. Можно, конечно,
использовать CSS, фреймы, что там еще. Но меня все
это по разным причинам не удовлетворяло
Еще, как выход, мне мерещилось
использование программы, которая заменяла бы во
всех файлах одни строки на другие. Ни то, господа,
ни то! Если что то сложное в плане хтмл, да еще
написанного вручную, то все это адский труд.
Только не подумайте, что я писал на хтмл.
Бывало, конечно, несколько строк накропаю, но я же
ленивый. За меня все делало FrontPage 98. Охаиваемое
всеми чудо.
Что же делать с этой кучей файлов с
расширением *.shtml и невозможностью сменить дизайн
так, то бы это не отозвалось болезненным
перелопачиванием всей этой кучи? Я ленив, и в
своих поисках я набрел на лучшее решение - PHP.
Возможность, которую он дает - один хтмл-шаблон
плюс файлы только с содержимым раздела я очень
быстро оценил!
Быстренько и монотонно освободив свои shtml ки от
разных табличек, вставок, картинок, и другой
мутотени я вытер пот со лба. Убрал расширения
файлов. Дело в том, что мой хостер хитро
сделал-поздней ночью их скрипт вставляет во все
файлы с расширением *.html код баннера.
Вот оно ! Стройный ряд файлов
выстроился перед моим взором. Умытые, похудевшие
и почистившиеся они требовали новой
одежки-дизайна.
Я сваял новый шаблон: index.php3.
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
function foo ($in) {
< !--если не вызывается просто index.php3 то
происходит вставка вызываемого файла-->
if ($in != "") {$out=$in;}
< !-- если происходит вызов index.php3 без имени файла,
то по умолчанию, вставляется файл main-->
else {$out="main";} return $out;}?>
<!--Мой дизайн и навигация-->
<!--Вызов функции с аргументом - именем файла,
запрашиваемым пользователем-->
<?php include (foo($QUERY_STRING)); ?>
<!--Мой дизайн и навигация-->
</BODY>
</HTML> |
Теперь я вызываю странички так
//myserver.ru/index.php3?news
//myserver.ru/index.php3?links
//myserver.ru/index.php3?about
А можно и просто
//myserver.ru/?news
//myserver.ru/?links
//myserver.ru/?about
Отсутствие расширений не является
критическим требованием. Если у вас набор файлов
с расширениями, это не послужит препятствием.
Можно вызывать для вставки любые файлы в
каталоге раздела.
Например :
//myserver.ru/index.php3?news.shtml
//myserver.ru/index.php3?links.txt
//myserver.ru/index.php3?about.htm
Конечно, если надо вносить
изменения в содержимое (новости подновить, новый
линк добавить), то приходится открывать файлы news
и link и уже там что-то менять.
Минусы подхода:
1) Таги <meta> и <title> распространяются на все
страницы раздела, объединенных общим index.php3.
2) Если поисковая система некорректно
обрабатывает сайты, использующие PHP, то
пользователь может и не найти Ваш сайт.
Сергей Владыкин //atlantida.agava.ru
Жду ваших замечаний и предложений
|
::::: Ali пишет 05.10.2000 @ 16:43 | |
Мое ИМХО (сразу оговариваюсь, т.к. тоже делаю первые шаги)
1. $QUERY_STRING можно применять и в SSI.
2. По поводу минусов:
1) meta> и title> тоже можно ведь инклудить.
2) а SSI поисковики ведь вроде все основные нормально видят?
3. а так сработает? (заранее извиняюсь, если тэги ниже сотрутся а не преобразуются)
<HTML>
<HEAD>
</HEAD>
<BODY>
<!--Мой дизайн и навигация-->
<!--Вызов функции с аргументом - именем файла, запрашиваемым пользователем-->
<?php
if ($in!=""){include $QUERY_STRING}
else {include "main"}
?>
<!--Мой дизайн и навигация-->
</BODY>
</HTML>
|
Думаю, что сработает в таком виде
<?php
if ($QUERY_STRING!=\"\"){include $QUERY_STRING}
else {include \"main\"}
?>
Махонькая принципиальность.
|
Пара маленьких замечаний:
1. Все это можно сделать на SSI:
<!--#IF EXPR="$QUERY_STRING"-->
<!--#include virtual="$QUERY_STRING" -->
<!--#ELSE -->
<!--#include virtual="news.shtml" -->
<!--#ENDIF -->
:))
2. это весьма небезопасно:
в QUERY_STRING я могу указать путь с "../" что позволит например несложным подбором получить любой доступный для чтения серверу, например /etc/passwd (можно попробовать http://atlantida.agava.ru/cgi/?/etc/passwd)
в случае с include virtual фалый должны будут находится только в каталоге с html но все равно проверять что получаете надо
|
::::: Juggy пишет 18.01.2001 @ 08:41 | |
Вот ! посмотрите что вышло! не работает скрипт ! помогите мне если можете !
|
::::: NAS пишет 18.01.2001 @ 10:45 | |
Думаешь мы здесь волшебники ? Показывай код в форуме разберемся.
|
::::: Juggy пишет 18.01.2001 @ 13:30 | |
::::: Juggy пишет 18.01.2001 @ 13:31 | |
<?
<HTML>
</HEAD>
<BODY>
<?php
function foo($in) {
if ($in != "") {$out=$in;}
else {$out="main";} return $out;}?>
<!--Мой дизайн и навигация-->
<?php include (foo($QUERY_STRING)); ?>
<!--Мой дизайн и навигация-->
</BODY>
</HTML>
?>
|
::::: Juggy пишет 18.01.2001 @ 13:31 | |
а сайт пишет что что-то не правильно!
|
::::: Juggy пишет 18.01.2001 @ 13:32 | |
Parse error: parse error in /home0/home-bos/36623/public_html/index.php3 on line 2
|
::::: NAS пишет 18.01.2001 @ 15:26 | |
Сравни свой код и код в статье. Сразу видно где ошибка и не одна, следующий раз пиши на форуме.
|
::::: Juggy пишет 19.01.2001 @ 04:20 | |
нет я все таки не понимаю ! посему не работает ? теперь все 1 в 1 !
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
function foo ($in) {
if ($in != "") {$out=$in;}
else {$out="main";} return $out;}?>
<!---ДИЗАЙН---->
<?php include ( foo($QUERY_STRING)); ?>
<!---ДИЗАЙН---->
</BODY>
</HTML>
|
::::: NAS пишет 19.01.2001 @ 08:58 | |
::::: Дмитрий пишет 22.01.2001 @ 12:22 | |
Подскажите как сделать сортирование на PHP. Делаю список и мне его надо отсортировать.
|
Привет всем!
всё что тут написано это конечно хорошо, но ...
вопрос: а как сделать так чтобы при несуществующей вставляемой страничке (есть бараны которые захотят поперебирать строку запроса) происходило перенаправление на страничку main.
Предположительно страниц немного, в пределах десятка.
Заранее спасибо.
|
Такой вот вопрос:
Есть файл index.php, в него вставляю вышеуказанный скрипт. Подбрасывает мне главную страницу, то есть main. Потом перехожу на другую страницу под название news и в строке броузера вижу http://myserver.com/index.php?news . А в файле news используется скрипт для прокрутки новостей, и когда он работает отдельно, то есть не как вставка, то строка состояния выглядит так http://myserver.com/index.php?what=2. И когда он пытается опять обратиться к исходному файлу, то видит не измененный index.php, а без вставки, то есть без своего ядра. Как решить эту проблему? помоги плиз. Ответы, если можно, дублируйте на мыло.
|
Забыл дописать.
И при этом выдает ошибку
Warning: Failed opening 'what=2' for inclusion
|
::::: Andrey пишет 21.03.2001 @ 15:59 | |
Ваш скрипт работает, но если открыть *.HTM файл сам по себе (например
на него дала ссылку поисковая система) он
открывается без меню и шапки, так вот можно
ли сделать скрипт (не забывая, что файлы HTM, теоретически
можно переименовать в PHP, но не удобно это),
что при открытии *.HTM файла открывался бы не
он, а хотя бы index.shtml, конечно
желательнее, что бы присоединялся файл blank.phtml
+ имя.htm
Заранее благодарен, Андрей.
|
::::: qw пишет 06.04.2001 @ 22:58 | |
Напешите мне пожалуйста все команды htm для того
чтоб создавать web-страницы в windows в простом редакторе типа "Блакнот"
|
::::: serge пишет 25.04.2001 @ 00:24 | |
Маладэц drongalaxy :)
основных команд будет штук 70. Лучше всего почитай книгу (бумажную) о хтмл
|
::::: NomaD пишет 25.04.2001 @ 13:56 | |
"Маладэц Вася - садись пилять"
|
::::: DVA пишет 29.04.2001 @ 01:34 | |
Хм, а чем данный подход лучше такого:
1) передаём в скрипт имя файла, через переменную
$menu (http://chto.to.ru/index.phtml?menu=имя_файла)
2)
if (empty($menu))
{include("main.txt");}
elseif(file_exists("$menu.txt"))
{include("$menu.txt");}
else
{echo "Запрошенная вами страница $menu.txt не найдена. Попробуйте начать с <a href=index.phtml?menu=main>главной</a>
страницы";}
Ась ? Я чего-то не въехал :(
|
::::: In пишет 22.05.2001 @ 09:20 | |
::::: ursus пишет 25.05.2001 @ 08:47 | |
А зачем вообще так делать?
Чтобы оформление не переписывать...
два инклуд файла сделать
top_Мой дизайн и навигация.inc
bottom_Мой дизайн и навигация.inc
и средствами SSI прикручивать к каждому файлу данных
PHP сдесь вообще не нужен
И секюрити мучать не надо
|
::::: PROXYMO пишет 17.10.2001 @ 19:49 | |
А як Вам таке....
<?
$file = "$QUERY_STRING";
if ($QUERY_STRING == "")
{
include("main");
}
else
{
if (file_exists($file))
{
include("$file");
}
else
{
include("main");
}
}
?>
|
::::: COHE4KO пишет 13.11.2001 @ 13:44 | |
Blin.. narod.. nefig vam sho robyty. vy znayete sho take MySQL... abo postgreSQL?
to mlya ne stradayete figneyu..a uchit'sya..
design minyaty hmm.. smishno.... navchit'sya spochatku programyty.. a potim.. ponty ganyaty.:)
chitayte man man..;)
|
::::: Doctor пишет 13.12.2001 @ 15:50 | |
Народ, привет! Подскажите плз. как сделать так, чтобы <title> инклюдить? Скинте плиз на мыло alexander@zolkin.ru Заранее спасибо.
|
::::: TROLL пишет 07.01.2002 @ 13:02 | |
кууул:-)
я разобрался и всё работает...
|
::::: Ivan пишет 07.01.2002 @ 20:43 | |
WOW! Хорошая статья (особенно для начинающих)!
Я сделал и все получилось просто отменно!
|
::::: General пишет 08.01.2002 @ 01:43 | |
Статья - полный отстой - скрипт дырявый - не вздумайте вешать на свои сайты !!!!! - через него можно выкачать любой файл с сервера ! Почему никто не додумался простеньким регекспом поудалять симолы / и . ?????
|
::::: XITMAN пишет 08.01.2002 @ 11:43 | |
Эта идея, но немного по другому, уже давно мною использовалась.
Советую использовать модуль apache mod_rewrite для того, что бы ссылки выглядели нормально!
|
::::: Graf пишет 08.01.2002 @ 12:04 | |
Полностью согласен с General
мало того скажу , что мой сайт таким образом и ломанули
было довольно неприятно
|
::::: Dioxsys пишет 24.01.2002 @ 12:08 | |
На примере моего сайта. Но скрипт не очень подходит для сайтов, с часто изменяющейся навигацией.
<?php
if ($QUERY_STRING == "") {
include("main.inc");
} elseif ($QUERY_STRING == "main.inc") {
include("main.inc");
} elseif ($QUERY_STRING == "news.inc") {
include("news.inc");
} elseif ($QUERY_STRING == "qsl.inc") {
include("qsl.inc");
} else
/*********************Including error filE*********************/
{
include("404.inc");
}
?>
Геморно, но зато никаких "http://www.lox.ru/index.php?../admin/мои_пароли.txt" :)
|
::::: Dioxsys пишет 26.01.2002 @ 00:02 | |
Или доработанный вариант, инклюдящий только расширение ".inc" и запрещающий выход из рабочей директории:
<?php
$path = dirname ("$QUERY_STRING");
if ($QUERY_STRING == "") {
include_once("main.inc");
}
elseif (!file_exists("$QUERY_STRING"."."."inc")) {
include_once("404.inc");
}
elseif ("$path" == ".") {
include_once("$QUERY_STRING"."."."inc");
}
else {
include_once("404.inc");
}
//***debug strings***
//print ("$path");
?>
|
::::: advocat пишет 01.02.2002 @ 23:49 | |
чесное слово, превратили статью в доску обсуждения .... для этого форум есть, непойти бы туда?
по поводу того что расширения html, то можна прописать в .htaccess строки:
---
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
---
что добавит чтение <? -- ?> как пхп тагов ....
А вообще я неполностью понимаю суть даного разговора, ведь все можна сделать намного проще ... через клас темплет или черер бд ...
|
хмм... Статья годится только для начинающих пхпвиков... Чуткаря продвинутее, программеры читать будут только краткую аннотацию... ну это то на чем можно начинать учиться...
2 COHE4KO:
мыскл рулез, но не для новичков... в таком возрасте =))) инфу лучше хранить в файлах, чтобы лучше с массивами разобраться...
|
вот гляньте Http://rammsteinzone.wallst.ru
там я исправил кое что в скрипте но меня волнует другае вещь
при нажатии кнопки
".::Архив новостей::."
пишет ошибка с чем это связано и как исправить??
|
|
2 Graf & XITMAN
Ломанули :)))))))))
а вы не пробовали вот такое?
Вот этот файл (.htaccess) пихнуть в папку вместе с вашим сайтиком? в котором мы делаем вот так..
DirectoryIndex index.php
<Files *.dat>
order allow,deny
deny from all
</Files>
<Files config.php>
order allow,deny
deny from all
</Files>
Если ваш хостин стоит на апачи, то вам уже не надо будет бояться за сайтик ;)
Потомучто по умолчанию там стоит вот такая вот хренотень :)
# AccessFileName: The name of the file to look for in each directory
# for access control information.
#
AccessFileName .htaccess
------------------------ а теперь index.php -----------------------------------------
<?
include("pass.dat");
if (!isset($page)) $page=0;
$data=file("config.php");
$max=count($data);
if ($page >$max) $page=0;
if (ereg("[[:alpha:]]",$page)) $page=0;
$data=explode("|",$data[$page]);
echo "<html><head>$data[1]";
include("top.php");
include("$data[0]");
include("end.php");
?>
-------------------------------- config.php -----------------------------
newsup.php|<title>Новости - Smart Computers</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache">
files/asdd.html|<title>О фирме - Smart Computers</title>
files/assd.html|<title>Контакты - Smart Computers</title>
files/az.html|<title>Дело - Smart Computers</title>
---------------------------------- pass.dat -------------------------------
сдесь можно уже паролики свои оставлять ;)
|
|
не $QUERY_STRING, а хотя бы $_SERVER['QUERY_STRING']
|
::::: Alien пишет 06.06.2003 @ 07:49 | |
Нда... прочитал в статье такие строчки:
" Я вовсю использовал SSI. Вы знаете что это такое ? Грубо говоря, у меня был шаблон хтмл, в него я вставлял меняющиеся элемнты типа меню навигации, баннеров и так далее. Но само содержание этого уже наполненного шаблона - не менялось! То есть для каждой странички в шаблон вставлял информацию, и сохранял на сервере. После этого, чтобы изменить цвет таблицы, мне пришлось бы заново делать шаблон, выдергивать информацию из старого и вставлять в новый."
Ну ты парень дал. На самом деле, чем и отличается SSI от ШТМЛ можно было на компе( не на сервере) открыть этот файл с дизайном и изменить в нем ОДНУ(!) нужную строчку, и перезалить на сервак. Это ОГРОМНОЕ ДОСТОИНСТВО SSI, но в ССИ мало функций. А вот если использовать РНР для этих целей, то круг возможностей возрастает очень сильно. Можно не только использовать систему ССИ( вложения файлов с дизайном), но и делать опросы, голосования и пр. только силами РНР.
И еще, если ты использовал ССИ, то зачем ты в КАЖДУЮ страничку копировал дизайн? Что-то я не пойму. В ССИ так: подключаешь внешний файл функцией
<!--#include virtual="ssi/_header.shtml" --> //Шапка документа, по сути - дизайн
<!--#include virtual="ssi/_menu.shtml" --> // наполнение меню. Здесь только ссылки по сайту
<!--#include virtual="ssi/_body.shtml" --> // промежуточная часть между дизайном и меню( если есть)
Содержание странички! // Пишешь свою инфу
<!--#include virtual="ssi/footer.shtml" --> // низ документа, в основном закрывающие теги
Вот такое расположение дает преимущество: чтобы изменить дизайн( или меню) не надо В КАЖДОЙ странице все менять в отдельности, достаточно в подключаемых файлах изменить. В основном это меню: когда добавляешь\убираешь странички. В РНР есть альтернатива: include(), то же самое. Это наверно для ССИ'шников сделали...
|
|
::::: max пишет 23.08.2003 @ 10:00 | |
Насчет дырявых скриптов:
<html> <head><?php include ("title.phtml");?></head> <body> <?
$add = $QUERY_STRING;
if ($add == "") { $addres = "main.phtml";}
else { $addres = $add; } include ( $addres ); ?>
</body></html>
Это дырявый? Сорри за ламерский вопрос.
|
::::: pauk пишет 02.01.2004 @ 16:24 | |
За подобные статьи надо бить не только по морде, но и по почкам.
Если не понятно почему - подумайте минут пять:)
Если не додумались - не программируйте отныне.
|
::::: greg пишет 02.02.2004 @ 18:42 | |
Блин... Pauk, за что статью окакал? Н пхп писать хоцца, а не умел вот таки штуки делать.. щас научился... Пользительная статья...
|
::::: MIHON пишет 16.05.2004 @ 01:30 | |
БЛЯ , Я УЖЕ ЗАЕБАЛСЯ С ЭТИМ ПХП - НИ ХУЯ НЕ ПОНЯТНО - ОТПИЗДИТЬ БЫ ТОГО ПИДАРАСА, КОТРЫЙ ПРИДУМАЛ ЭТОТ ПХП !!!!
|
::::: Jet пишет 13.01.2005 @ 20:01 | |
MIHON - а кто же заставляет... ты уж лучше блакнот взломай - для нервов спокойнее
greg - блин, greg, за что маны похерил? маны сначала читай, а не статьи. по моему, прочитав описание include() и require() эти мысли по дефолту напрашиваются...
Alien - "Ну ты парень дал. На самом деле, чем и отличается SSI от ШТМЛ ..." а тем и отличается, что ШТМЛ(Hyper Text Markup Language) = разметка, которая интерпретируется клиентом, а ССИ (Server Side Includes) = интерпретируемые на серваке директивы
General - "Почему никто не додумался простеньким регекспом поудалять симолы / и . ?????" А не проще вообще в строке запроса имя файла не использовать?
Объявите массивчик типа:
<?php
$files=array(
1=>"news.html",
2=>"blabla.html",
....
);?>
в файле, скажем, settings.inc
в строке вызывайте чё-то типа http://mysite.com/index.php?show=1
а в теле index.php напишите что-то в этом духе
<?
include ('settings.inc');
// дальше верхушка дизайна и т.п.
// вообще-то, settings.inc можно добавить и прямо в в эту верхушку
if (array_key_exists($_GET['show'], $files) include ($files[$_GET['show']]);
else include('main.html');
// и, наконец, нижняя часть дизайна
?>
При этом не забывайте, что путь, по которому находятся файлы, описанные в $files должен быть настроен в include_path в php.ini
Дерзайте! Кто программер - тот поймёт, кто не понял - маны в руки...
|
|
::::: Danix пишет 31.10.2007 @ 05:45 | |
В последних версиях PHP на Denwer'е этот код выдавал ошибку:
Так и не разобрался почему, скорее всего потому что нет такой функции или аргумента как main():
http://ua2.php.net/manual/ru/function.main.php
решается это так (рабочий код без комментариев):
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
function foo ($in) {
/*если не вызывается просто index.php3 то происходит вставка вызываемого файла*/
if ($in != "") {$out=$in;}
?>
/*Мой дизайн и навигация*/
/*Вызов функции с аргументом - именем файла, запрашиваемым пользователем*/
<?php
if ($QUERY_STRING != "")
{
include (foo($QUERY_STRING));
}
?>
/*Мой дизайн и навигация*/
</BODY>
</HTML>
|
::::: Danix пишет 31.10.2007 @ 05:53 | |
Упс, не написал ошибки которые выскакивали:
Parse error: parse error, unexpected '<' in ...
Warning: main(main) [function.main]: failed to open stream: No such file or directory in...
Warning: main() [function.include]: Failed opening 'main' for inclusion (include_path='.;/usr/local/php/PEAR') in...
1-я ошибка решилась заменой конструкции: <!--Комментарий--> на : /*Комментарий*/
2-я и 3-я решилась удалением строчки: else {$out="main";} return $out;} из кода + замена:
<?php include (foo($QUERY_STRING)); ?> на:
if ($QUERY_STRING != "")
{
include (foo($QUERY_STRING));
}
В итоге получился рабочий код :)
Дерзайте!
|
::::: Danix пишет 31.10.2007 @ 05:57 | |
Упс, опять ошибку сделал: после строчки
if ($in != "") {$out=$in;}
нужно ещё добавить:
return $out;}
Тогда будет всё ок! :)
|
При использовании PHP в первую очередь надо обращать на безопасность. При использовании INCLUDE легко пропустить дыру в безопасности.
|
::::: Антон пишет 01.11.2008 @ 11:42 | |
в общем дело обстоит так
-------------------------------------------------
есть шапка
-------------------------------------------------
меню в строке
-------------------------------------------------
тут подменю . тут содержание .
выбранное из . раздела выбраного из меню .
меню строки . с лева .
как правильно сделать так чтобы при нажатии в левом меню
появлялось тока в поле странички
а не на всем поле где стоит левое меню и само содержание??????
|
| |