Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамические Title, Descriptions, Keywords
 
 автор: Soloway   (05.03.2007 в 17:45)   письмо автору
 
 

Уважаемые, не бейте сильно.
Поиск юзал, но всё несколько не в том аспекте...
Словом, ещё раз сорри и ткните носом, плз.

Задача такая:
Есть сайт, ссылки вида site/tema1.php, site/tema2.php, site/tema3.php... Есть файл шаблона, в который при переходе по вышеперечисленным ссылкам подгружается соответствующий контент.
Нужно организовать динамические Title, а в идеале и Descriptions, и Keywords, что бы с каждым файлом они подгружались в шаблон... Т.е. по ссылке tema1.php выводились title, скажем "Главная", по tema2.php - "О компании", tema3.php - "форум" и т.п.

Как организовать?
Спасибо.

   
 
 автор: zerocool   (05.03.2007 в 17:48)   письмо автору
 
   для: Soloway   (05.03.2007 в 17:45)
 

А данные откуда берутся, к примеру сам контент страницы?

   
 
 автор: soloway   (05.03.2007 в 17:52)   письмо автору
 
   для: zerocool   (05.03.2007 в 17:48)
 

Есть шаблон: design.php, ссылки динамические, типа design.php?id=1, через РеврайтМод они преобразуются в статические, типа, как указал ранее - tema1.php... Ну а собственно контент страницы содержится в отдельных файлах 1.php, 2.php и т.д. и подгружается в design.php

   
 
 автор: zerocool   (05.03.2007 в 17:55)   письмо автору
 
   для: soloway   (05.03.2007 в 17:52)
 

Тогда также и сделать как подгружается и контент страницы
прописываете также в этих файлах для каждой страницы свой title
С БД было проще

   
 
 автор: tokmak   (05.03.2007 в 18:29)   письмо автору
 
   для: zerocool   (05.03.2007 в 17:55)
 

Я делал так. Создал страничку например title.php ввел в нее пару строк. По твой тематике.

<?php
title1
"Главная";
title2="О компании";
title3="Forum";
?>

Далее на каждой странице создаешь любую переменную например var1=1, var2=2, var3=3 и вставляешь в каждую страницу.
Например Страница Главная index.php

<?php  
include("title.php"); ?>
<html>
<title><?php echo $title1?></title>
<body>
</body>
</html>

И так для каждого контента.
Или вставкой кода

<? if (isset($var1)) {
echo 
$title1; }
if (isset(
$var2)) {
echo 
$title2;
}
if (isset(
var3)) {
echo 
$title3; } ?>

Но это не самый удобный прием, но он работает. А можно и через БД.

   
 
 автор: soloway   (05.03.2007 в 21:07)   письмо автору
 
   для: tokmak   (05.03.2007 в 18:29)
 

2 tokmak
Спасибо. Сейчас, чуть позже попробую, но помоему именно так где-то...
Насколько я понимаю, конечно.
...а понимаю я не очень много.)))
Спасибо.

   
 
 автор: soloway   (05.03.2007 в 21:03)   письмо автору
 
   для: zerocool   (05.03.2007 в 17:55)
 

>>> Тогда также и сделать как подгружается и контент страницы прописываете также в этих файлах для каждой страницы свой title
В том-то и дело, что вписывал, в "подгружаемые" файлы и даже работало, да и в принципе, меня-то устраивает, но в итоге собственно код (после обработки, если смотреть из браузера) получался не очень красивый...
Типа

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body leftmargin="0" topmargin="0" marginheight="0" marginwidth="0">
<bla-bla-bla>
<bla-bla-bla>
<bla-bla-bla>
...
<и только потом>
<title>Компания «Компания» :: Раздел Такой-то</title>
<и далее>


Оно бы в принципе и не страшно, но опять вопрос (и вобщем-то главный на сегодня)...
С поисковиками могут проблемы быть? (ну из-за того, что title не сверху, а где-то ниже и значительно)???

   
 
 автор: cheops   (06.03.2007 в 01:33)   письмо автору
 
   для: soloway   (05.03.2007 в 21:03)
 

>С поисковиками могут проблемы быть? (ну из-за того, что title не сверху, а где-то ниже и
>значительно)???
Да, они могут его игнорировать...

   
 
 автор: ZuArt   (06.03.2007 в 09:37)   письмо автору
 
   для: soloway   (05.03.2007 в 21:03)
 

1) с поисковиками траблы будут ГАРАНТИРОВАНО.
2) можно сделать и так:


1.php
<?
$content
["title"] = "Главная";
$content["keywords"] = "";
$content["..."] = "";
$content["html"] = 'Собственно сам контент. Вместо оператора вывода echo "контент" использовать конструкцию $content["html"] .= "контент"';
?>

2.php
<?
$content
["title"] = "О компании";
$content["keywords"] = "";
$content["html"] = 'Собственно сам контент. Вместо оператора вывода echo "контент" использовать конструкцию $content["html"] .= "контент"';
?>

tpl.htm
<html>
<title><{$content["title"]}></title>
<meta ....>
<body>
{$content["html"]}
</body>
</html>

main.php
<?
$content 
= array("title"=>"""keywords"=>"""..."=>"");
include(
"нужный файл контента")
include(
"tpl.htm")
?>


Отдельно код скрипта, отдельно содержимое страниц, отдельно шаблон - править все достаточно удобно...

   
 
 автор: soloway   (06.03.2007 в 12:12)   письмо автору
 
   для: ZuArt   (06.03.2007 в 09:37)
 

Уважаемые, спасибо!
Вашими подсказками я обязательно воспользуюсь!
Но пока сделал вот так:

В файле шаблона, в котрый собственно всё грузится:

<title><? php include("title.php"); echo( "Название Компании"); ?></title>


В файле title.php

<?
if($_SERVER['REQUEST_URI']=="/page1.htm") {?>Раздел 1<?}
if(
$_SERVER['REQUEST_URI']=="/page2.htm") {?>Раздел 2<?}
<
и тд.>
else {
?>Описание для всех остальных разделов<? }
?>


Что вы можете сказать на это? Имеет право на существование?
Вроде работает... Но может какие ошибки исправить что б код по-элегантней был?

   
 
 автор: soloway   (06.03.2007 в 12:15)   письмо автору
 
   для: soloway   (06.03.2007 в 12:12)
 

И ещё...
После обработки браузером код выглядит так:

<title>
Раздел1 Название Компании</title>

Т.е. не в одну строку а в две, после открывающегося тэга перенос на другую строку...
Возможны ли из за этого проблемы индексации и как исправить?

С Descriptions, Keywords хочу в принципе поступить примерно так же...

   
 
 автор: ZuArt   (06.03.2007 в 13:22)   письмо автору
 
   для: soloway   (06.03.2007 в 12:15)
 

проблемы могут быть легко, т.к. не все пауки корректно воспримут символ перевода строки, многие просто воспримут содержимое <title></title> как пустое значение... по поводу способа - ВСЕ имеет право на существование, но суть такова, что каждую страницу придется разбивать на разные файлы (что логически плохо, т.к. сложнее связь между ними отслеживать) - заголовок, ключевики, содержимое - и это все разное файло - нехорошо как-то =(((

тогда уж лучше писать так

main.php

<html>
<head>
<?include("topN")?>
<meta ....> общие метатеги
</head>
<body>
<?include("contentN")?>
</body>

topN.php
<title>Заголовок N-ой страницы</title>
<meta ...> соответствующие мета теги (в частности ключевики)

contentN.php
СОБСТВЕННО КОНТЕНТ


Тогда и переводов строк не будет и все-таки 2 файла легче совмещать логически, чем 3-4-5 и больше...
А заголовок напрямую логически связан с метатегами и идут эти теги в заголовке страницы, потому можно и схитрить маленько.

   
 
 автор: ZuArt   (06.03.2007 в 13:34)   письмо автору
 
   для: ZuArt   (06.03.2007 в 13:22)
 

ну или еще наглее вариант


1.php
<?
switch ($out)
{
 case 
0:?>
<title>Выводим заголовочную информацию</title>
 <?break;
 case 
1:?>
<meta ... >Выводим метаинформацию
 <?break;
 case 
2:?>
Выводим собственно наполнение страницы
 <?break;
 case 
3:?>
Выводим подвал страницы (если он нужен, естессно)
 <?break;
};
$out++;
?>

main.php
<html>
<head>
<?include("1.php")?>
<meta ...>
<?include("1.php")?>
</head>
<body>
<?include("1.php")?>
<hr>
<?include("1.php")?>
</body>


Преимущества в том, что все блоки, которые составляют страницу содержатся в одном файле и четко разделены.

   
 
 автор: soloway   (06.03.2007 в 14:16)   письмо автору
 
   для: ZuArt   (06.03.2007 в 13:34)
 

Блин, последний вариант действительно классный. Попробую его обкатать...

Но всё-таки, сорри, я ещё раз со своим вклинюсь. На данный момент, дабы избежать переноса строк, я сделал примерно так:

шаблон:

head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<?php include("title/title.php"); echo( "Название Компании"); ?></title>


title.php

<?

if($_SERVER['REQUEST_URI']=="/page1.htm") echo "<title>Стр 1. ";
elseif(
$_SERVER['REQUEST_URI']=="/page2.htm") echo "<title>Стр 2. ";
elseif(
$_SERVER['REQUEST_URI']=="/page3.htm") echo "<title>Стр 3. ";
elseif(
$_SERVER['REQUEST_URI']=="/page4.htm") echo "<title>Стр 4. ";

else echo 
"<title>Для остальных страниц. ";

?>

Т.е. открывающий тэг <title> отсутствует в шаблоне и инклюдится из title.php

По некой неудобности редактирования я согласен, потому и попробую твой метод, но сейчас надо срочно выложить, то что есть, а перекраивать все контенты пока времени нету. Словом пока так...

Ещё. По коду моей лабуды. Читал, что elseif нежелательны, но по-другому у меня не работает. Когда вместо elseif были if, то else грузилось для всех if, кроме самого ближнего, т.е. if($_SERVER['REQUEST_URI']=="/page4.htm") echo "<title>Стр 4. "; в данном случае...

Что-то мне подсказывает, что надо было что-то заключить в фигурные скобки. Пробовал, но в результате всех моих проб вылезали ошибки. Словом не подкорректируете, если так:

<?

if($_SERVER['REQUEST_URI']=="/page1.htm") echo "<title>Стр 1. ";
if(
$_SERVER['REQUEST_URI']=="/page2.htm") echo "<title>Стр 2. ";
if(
$_SERVER['REQUEST_URI']=="/page3.htm") echo "<title>Стр 3. ";
if(
$_SERVER['REQUEST_URI']=="/page4.htm") echo "<title>Стр 4. ";

else echo 
"<title>Для остальных страниц. ";

?>

Т.е. чтобы для всех условий, неопределённых в if, было else...

ЗЫ. Или бог с ними, оставить elseif?

   
 
 автор: ZuArt   (06.03.2007 в 14:55)   письмо автору
 
   для: soloway   (06.03.2007 в 14:16)
 

впервые слышу, что else if (кстать, раздельно пишется) вызывало какие-то баги...

если же его не юзать, то что-то типа этого получится (на мой взгляд бредятина полная)


<?
if($_SERVER['REQUEST_URI']=="/page1.htm") echo "<title>Стр 1. "
else{
 if(
$_SERVER['REQUEST_URI']=="/page2.htm") echo "<title>Стр 2. "
 
else {
  if(
$_SERVER['REQUEST_URI']=="/page3.htm") echo "<title>Стр 3. "
  
else {
  if(
$_SERVER['REQUEST_URI']=="/page4.htm") echo "<title>Стр 4. "
  
else echo "<title>Для остальных страниц. ";
  }
 }
};
?> 


PS. Относительно "последний вариант"-а - там можно использовать доп. возможности...
- если использовать в главном файле какой-то набор общих переменных, типа
$main_ttl = "Имя сайта"
, тогда в подключаемых файлах можно их выводить в нужном месте
echo "<title>Заголовок от шаблона - $main_ttl</title>";

Не придется тогда из шаблона инклюдить часть "<title>" , потом дописывать еще что-то и потом закрывать "</title>" - так и запутаться недолго ;)

- если убрать из подключаемого файла $out++, а ставить его в главном файле, то можно более гибко управлять выводами - например какой-то блок вызвать дважды... получим небольшое изменение

$out =0;
...
<?include("1.php");$out++;?> // выведет заголовок
...
<?include("1.php");$out++;?> // выведет мета теги
...
<?include("1.php");$out++;?> // выведет еще что-то там
...
<?$out=5; include("1.php")?;$out=2;> // выведет что-то дополнительное
...
<?include(
"1.php");$out++;?> // опять по основному алгоритму =)


преимущества - ЧЕТКО организовав зависимость индексов
0-заголовок
1-мета
2-блок контента
3-....
..... и т.д.
N - блок подменю (например)

можно четко в основном файле прописать где и что вставлять, а в самих файлах можно не определять ненужный (в данном наполнении) блок, тогда просто в это место ничего не выведется ;)

   
 
 автор: ZuArt   (06.03.2007 в 14:57)   письмо автору
 
   для: ZuArt   (06.03.2007 в 14:55)
 

ЗЫ. Очепятался - $out = 0; естессно заключить в <? $out = 0; ?>

   
 
 автор: soloway   (06.03.2007 в 15:38)   письмо автору
 
   для: ZuArt   (06.03.2007 в 14:57)
 

Спасибо, как уже сказал, буду обкатывать. :)

А насчёт нежелательности использования else if:
"Однако, вообще говоря, использование оператора elseif довольно сильно ухудшает читабельность кода" - http://www.softtime.ru/bookphp/gl2_1.php
Ну тут может и я не совсем верно трактовал "нежелательность"... Так что пока ладно.

Ещё раз тебе спасибо за помощь!

   
 
 автор: fis   (06.03.2007 в 15:51)   письмо автору
 
   для: soloway   (05.03.2007 в 21:03)
 

А почему поисковики должны игнорировать? В принципе если поисковик ищет титл и мета теги по рег выражениям, то никаких проблем быть не может - ему вроде все равно где будет этот титл написан.....

   
 
 автор: soloway   (08.03.2007 в 23:19)   письмо автору
 
   для: fis   (06.03.2007 в 15:51)
 

[deleted]
Сорри, это было ошибочное сообщение.

   
 
 автор: ZuArt   (09.03.2007 в 10:03)   письмо автору
 
   для: fis   (06.03.2007 в 15:51)
 

ВОЗРАЖУ, причем ЖЕСТКО =)
1) Поисковик не "ищет" титл, а просматривает код полученной страницы и если НАХОДИТ, то принимает его
2) Все поисковики берут только ОГРАНИЧЕННЫЙ кусок страницы - килов так 100-200 - не больше точно... и если титл или служебные теги разместить дальше границы - то поисковик их НИКОГДА не увидит...
3) Браузеры также могут некорректно отбработать код страницы, если он некорректно написан... в частности как-то встретил пример, в котором был код такого типа: <html><body><title></title></body></html><body></body> - смешно, но в браузерах работал, правда в каком-то из них все стили поотлетали к едрене фене - но ведь "работало" =)))))

   
 
 автор: cheops   (09.03.2007 в 12:30)   письмо автору
 
   для: ZuArt   (09.03.2007 в 10:03)
 

Добавлю, что информация эта предположительная, как на самом деле работает робот той или иной поисковой системы доподлино, как правило, не известно. Один поисковый робот может брать любой заголовок, друго вообще его игнорировать. Третий назначать коэффициент в зависимости от того, считает он заголовок подлиным или нет.

   
 
 автор: ZuArt   (09.03.2007 в 12:52)   письмо автору
 
   для: cheops   (09.03.2007 в 12:30)
 

не совсем предположительна =) - частично, т.к. некоторые поисковики ОФИЦИАЛЬНО выкладывают информацию по работе своих пауков (естессно не всю ;) )... в частности Яндекс четко говорит, что берет не всю страницу, а только ее часть определенного объема =)

   
 
 автор: cheops   (09.03.2007 в 15:54)   письмо автору
 
   для: ZuArt   (09.03.2007 в 12:52)
 

Да, информация к счастью просачивается, но нельзя быть точно уверенным, что робот Rambler, Google, Aport или любой другой поисковой системы поступает точно также.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования