Делаем управляемые META-теги, т.е. задумываемся о раскрутке в поисковых системах

Впринципе, сайт и админку можно считать готовыми, но я бы предложил их улучшить. Когда мы создаем сайт, нельзя забывать про поисковые системы. Для них необходимо указывать такие вещи как тег title и метатеги keywords и description. Сейчас мы этим и займемся. Заодно, как Вы могли заметить, неудобно выбирать страницы по номерам, было бы неплохо дать им названия. Итак, заходим в нашу БД и добавляем новые поля, выполнив запрос:
ALTER TABLE `pages` ADD `title` VARCHAR( 255 ) NOT NULL ,
ADD `metatitle` VARCHAR( 255 ) NOT NULL ,
ADD `metakeywords` VARCHAR( 255 ) NOT NULL ,
ADD `metadescription` TEXT NOT NULL;
Теперь подправим нашу админку, в которой учтем новые поля. Добавляем в нашу функцию show_form() новые элементы формы, теперь она будет выглядеть так:
<?
function show_form(){
        
// подключаем файл с настройками подключения к БД
        
require '../inc/connect.php';

        
//делаем запрос к БД, на данный момент на следующие две строчки не стоит обращать внимание, объясню их потом, посокльку на данном этапе они еще не используются.
        
$result = mysql_query("SELECT * FROM pages WHERE id = '".$_GET['id']."';", $link);
        
$row = mysql_fetch_array($result);
?>
<!-- далее идет обычный HTML -->
<form action="" method="post">
<table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
<tr bgcolor="#B0ADC3">
  <td>
     <p>Название страницы (title)</p>
  </td>
</tr>
<tr bgcolor="#ffffff">
  <td>
     <input type="text" name="title" value="<?=htmlspecialchars(stripslashes($row['title']));?>" class="enter" size="79">
  </td>
</tr>
<tr bgcolor="#B0ADC3">
  <td>
     <p>Заголовок страницы (Meta - title)</p>
  </td>
</tr>
<tr bgcolor="#ffffff">
  <td>
     <input type="text" name="metatitle" value="<?=htmlspecialchars(stripslashes($row['metatitle']));?>" class="enter" size="79">
  </td>
</tr>
<tr bgcolor="#B0ADC3">
  <td>
     <p>Ключевые слова (Meta - keywords)</p>
  </td>
</tr>
<tr bgcolor="#ffffff">
  <td>
     <input type="text" name="metakeywords" class="enter" size="79" value="<?=htmlspecialchars(stripslashes($row['metakeywords']));?>">
  </td>
</tr>
<tr bgcolor="#B0ADC3">
  <td>
     <p>Описание (Meta - description)</p>
  </td>
</tr>
<tr bgcolor="#ffffff">
  <td>
     <input type="text" name="metadescription" class="enter" size="79" value="<?=htmlspecialchars(stripslashes($row['metadescription']));?>">
  </td>
</tr>
<tr bgcolor="#B0ADC3">
  <td><p>Текст страницы</p></td>
</tr>
<tr bgcolor="#ffffff">
  <td>
      <textarea name="body" rows="20" cols="59" class="enter">
                <?// "<?=" тоже самое, что и "<? echo", т.е. вывод на экран, что выводим объясню позже ;-) ?>
                <?=stripslashes($row['body']);?>
      </textarea>
  </td>
</tr>
<tr>
  <td bgcolor="#1F2760" align="right">
      <input type="hidden" name="id" value="<?=$_GET['id'];?>">
      <input type="submit" value="отправить" name="edit">
  </td>
</tr>
</table>
</form>
<?
} // функция show_form() закончилась
Поменяли форму, теперь надо заменить функцию complete(), в которой мы записываем наши данные в базу:
<?function complete(){
      
// подключаем файл с настройками подключения - это мы уже знаем.
      
require '../inc/connect.php';

      
// делаем запрос к БД в котором пытаемся вытащить страничку с указаным id. На данный момент мы не сделали еще ни одной страницы, посему запрос вернет пустой ряд.
      
$result = mysql_query("SELECT * FROM pages WHERE id = '".$_POST['id']."';", $link);

      
// перекидываем данные из MySQL в пхпшный ассоциативный массив
      
$row = mysql_fetch_array($result);

      
// проверяем не пуст ли элемент массива id. Если пуст, значит вставляем наши данные в БД
      
if(empty($row['id']))
            
$query = "INSERT INTO pages
                     (body,
                      title,
                      metatitle,
                      metakeywords,
                      metadescription)
                                      VALUES
                            ('"
.mysql_real_escape_string($_POST['body'])."',
                             '"
.mysql_real_escape_string($_POST['title'])."',
                             '"
.mysql_real_escape_string($_POST['metatitle'])."',
                             '"
.mysql_real_escape_string($_POST['metakeywords'])."',
                             '"
.mysql_real_escape_string($_POST['metadescription'])."')";
      
// а вот если не пуст, значит с этим id уже есть запись и в данном случае мы ее просто отредактируем
      
else
            
$query = "UPDATE pages SET
                                     body = '"
.mysql_real_escape_string($_POST['body'])."',
                                     title = '"
.mysql_real_escape_string($_POST['title'])."',
                                     metatitle = '"
.mysql_real_escape_string($_POST['metatitle'])."',
                                     metakeywords = '"
.mysql_real_escape_string($_POST['metakeywords'])."',
                                     metadescription = '"
.mysql_real_escape_string($_POST['metadescription'])."'
                     WHERE id = '"
.$_POST['id']."';";

      
// непосредственно записываем наши данные в базу (до этого мы просто описывали, что надо сделать, а теперь делаем)
      
mysql_query($query, $link);

      
// ну и просто выводим крикливую надпись, что скрипт отработал
      
echo '<h3>Данные обновлены</h3>';
}
?>
Заливаем нашу новую админку на сервер. Заходим в созданные страницы и каждой из них пишем название. Теперь предлагаю выводить список наших страничек не по id, а по названию. Для этого правим функцию show_pages():
<?function show_pages() {
        require
'../inc/connect.php';
        echo
'
<table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
<tr bgcolor="#B0ADC3">
  <td>
     <a href="?id=new">Добавить страницу</a>
  </td>
</tr>
</table>'
;
        echo
'
<table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
<tr bgcolor="#B0ADC3">
  <td>
     <b>Название страницы</b>
  </td>
</tr>'
;
        
$result = mysql_query("SELECT * FROM pages ORDER BY id;", $link);
        while(
$row = mysql_fetch_array($result)){
               echo
'
<tr bgcolor="#ffffff">
  <td>
     <a href="?id='
.$row['id'].'">'.stripslashes($row['title']).'</a>
  </td>
</tr>'
;
        
// думаю вы заметили, что в тексте ссылки мы заменили $row{'id'] на $row['title'] и добавили обработку функцией stripslashes()
        
}
        echo
'
</table>'
;

}
?>
Как будет выглядеть наш файл по результатам я писать не буду, надеюсь Вы самостоятельно справитесь с не сложной задачей по небольшим исправлениям в наших функциях. А пока лучше вернемся к нашему основному файлу index.php и настроим вывод наших мета-тегов непосредственно на сайте.
<?  
        
require 'inc/connect.php';

        
//htmlspecialchars() Преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались.
        
$_GET['id'] = htmlspecialchars($_GET['id']);

        
// если у нас не запрашивали никакую определенную страницу, то будем выводить нашу самую первую. Если Вы ее давно удалили, поставьте вместо единички идентификатор той странички, которую Вы хотели бы грузить по умолчанию
        
if(empty($_GET['id'])) $_GET['id'] = 1;
        
$result = mysql_query("SELECT * FROM pages WHERE id = '".$_GET['id']."';", $link);
        
$row = mysql_fetch_array($result);
?>
<html>
<head>
  <title><?=$row['metatitle'];?></title>
  <META NAME="description" CONTENT="<?=htmlspecialchars(stripslashes($row['metadescription']));?>">
  <META NAME="keywords" CONTENT="<?=htmlspecialchars(stripslashes($row['metakeywords']));?>">
</head>
<body>
<!-- меню делаем ручками, по принципу: -->
<a href="?id=1">первая страница</a>
<a href="?id=2">вторая страница</a>
<a href="?id=3">контакты</a><br /><br />
<?//stripslashes() - Удаляет экранирование символов - а их мы понаставили в админке, когда загружали данные в базу с помощью функции mysql_real_escape_string()?>
<?=stripslashes($row['body']);?>
</body>
</html>
Изменений прасктически нет, просто вывели наши данные в метатегах и в тайтл. Думаю Вы уже можете самостоятельно заметить, где это сделано. Кстати, мы можем выводить наши названия страниц в меню! Это уже на Ваше усмотерние. Сделать это можно так:
<?
echo 'Наше меню: ';
        
$resultMenu = mysql_query("SELECT * FROM pages ORDER BY id;", $link);
        
$rowMenu = mysql_fetch_array($resultMenu); // выведем первый пункт меню без точечки
        
echo '<a href="?id='.$rowMenu['id'].'">['.stripslashes($rowMenu['title']).']</a>';
        while(
$rowMenu = mysql_fetch_array($resultMenu)){
               echo
' &middot; <a href="?id='.$rowMenu['id'].'">['.stripslashes($rowMenu['title']).']</a>';
        }
?>
Осталось красиво оформить странички - это уже html - думаю с этим проблем у Вас возникнуть не должно ;-)
« Вывод данныхПаролируем админку »


Ниже Вы можете пофлудить - можете спросить, обругать, похвалить и т.д.

Добавление комментариев отключено


30.08.2012   Race

ALTER TABLE `pages` ADD `title` VARCHAR( 255 ) NOT NULL ,
ADD `metatitle` VARCHAR( 255 ) NOT NULL ,
ADD `metakeywords` VARCHAR( 255 ) NOT NULL ,
ADD `metadescription` TEXT NOT NULL;

зачем такое большое значение? (255) и названия можно сократить до meta_d(k)... показывайте сразу оптимизированные примеры... а не написал ради надписи:)



11.05.2012   Стас

Пишет
Parse error: syntax error, unexpected '<' in X:\home\localhost\www\phpad\adm\index.php on line 35



15.07.2011   kotovskij565

сам допетрил вот если кому надо:
<?
$resultMenu = mysql_query("SELECT * FROM praktikym ORDER BY id;", $link);
$rowMenu = mysql_fetch_array($resultMenu);
echo '<a href="?id='.$rowMenu['id'].'"><center>'.stripslashes($rowMenu['title']).'</center></a>';
while ($rowMenu = mysql_fetch_array($resultMenu)){
echo '<a href="?id='.$rowMenu['id'].'"><center>'.stripslashes($rowMenu['title']).'&nbsp;</center></a>';
}
?>



15.07.2011   kotovskij565

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



15.07.2011   kotovskij565

Прива автор и все тут сидящие...!! Может кто подскажет как это меню можно красиво оформить в вертикальном варианте? чтоб без скобок черточек, а просто статьи по порядку вниз шли... очень надо! помогите ребят....



08.06.2011   татьяна

единственная админка, которую я наконец-то поняла Большое спасибо!!!!



21.02.2010   serdj

Вот кажись чтото получилось с добавлением последних добавленных ссылок, и выводом их на главной страничке в виде новостного анонса.
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt;Хотелось бы знать ваше мнение, и нет ли существенных ошибок в коде.
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt;&amp;amp;amp;amp;lt;?
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt; $resultMenu = mysql_query(\\\\\\\\\\\\\\\\&amp;amp;amp;amp;quot;SELECT id, title FROM pages ORDER BY id DESC LIMIT 4\\\\\\\\\\\\\\\\&amp;amp;amp;amp;quot;, $link);
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt; $rowMenu = mysql_fetch_array($resultMenu); // выведем первый пункт меню без точечки
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt; echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'&amp;amp;amp;amp;amp;middot; &amp;amp;amp;amp;lt;a href=\\\\\\\\\\\\\\\\&amp;amp;amp;amp;quot;/dlya_oli/?id=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'.$rowMenu[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'id\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'].\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'.stripslashes($rowMenu[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'title\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\']).\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'&amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br&amp;amp;amp;amp;gt;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt; while($rowMenu = mysql_fetch_array($resultMenu)){
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt; echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' &amp;amp;amp;amp;amp;middot; &amp;amp;amp;amp;lt;a href=\\\\\\\\\\\\\\\\&amp;amp;amp;amp;quot;/dlya_oli/?id=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'.$rowMenu[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'id\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'].\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'.stripslashes($rowMenu[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'title\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\']).\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'&amp;amp;amp;amp;lt;br&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;gt;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt; }
<br>&lt;br&gt;&amp;lt;br&amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;amp;lt;br&amp;amp;amp;gt;?&amp;amp;amp;amp;gt;



21.02.2010   serdj

Сейчас, я заметил что на многих сайтах делают колонку новостей.
Решил попробовать и себе такое.
Вот в базу добавил, время, дату, автора.
Прицепил урезание переменной.
Потом всё это дело замастачил в один файл.
А вот дальше упёрся.
Наверное надо было-бы, что-бы выводилось определённое колличество последних добавлений с сылкой на ту статью которую добавил.
Но я что то здесь на вашем сайте, ничё подобного не встречал, может просмотрел?
Вот, кину что сделал.
<?
require 'inc/connect.php';

//htmlspecialchars() Преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались.
$_GET['id'] = htmlspecialchars($_GET['id']);

// если у нас не запрашивали никакую определенную страницу, то будем выводить нашу самую первую. Если Вы ее давно удалили, поставьте вместо единички идентификатор той странички, которую Вы хотели бы грузить по умолчанию
if(empty($_GET['id'])) $_GET['id'] = 5;
$result = mysql_query("SELECT * FROM pages WHERE id = '".mysql_escape_string($_GET['id'])."';", $link);
$row = mysql_fetch_array($result);
?>
<html>
<head>
<title><?=$row['metatitle'];?></title>
<META NAME="description" CONTENT="<?=htmlspecialchars(stripslashes($row['metadescription']));?>">
<META NAME="keywords" CONTENT="<?=htmlspecialchars(stripslashes($row['metakeywords']));?>">
</head>
<body>




<?//stripslashes() - Удаляет экранирование символов - а их мы понаставили в админке, когда загружали данные в базу с помощью функции mysql_real_escape_string()?>
<hr><?=stripslashes($row['data']);?><hr><?=stripslashes($row['time']);?><hr><?=stripslashes($row['author']);?><hr>
<?=substr(stripslashes(trim($row['bodyua'])), 0, 250);// Урезаем переменную с выводом текста до 250 символов
?>
<hr>
<? echo '<a href="/dlya_oli/russian/?id='.$_GET['id'].'">Тот же текст только на русском</a>';?>
</body>
</html>
Может чем поможете.



20.02.2010   serdj

Очень признателен вам и вашим трудам.
Если бы вы знали, на скольки я форумах задавал подобный вопрос.
Пока в конце концов не вернулся на пути своя.



20.02.2010   serdj

Спасибо за помощь.
Изменеие цвета убрал, сделал чтобы при открытии странички ссылка с активной менялась на не активную.
Думаю цвет ссылки, потом наверное CSS изменит.
Квам ещё маленькая просьба, сказать нет ли ошибок в то коде что я переделал.

$resultMenu = mysql_query('SELECT * FROM pages ORDER BY id');
$rowMenu = mysql_fetch_array($resultMenu);{
if(($rowMenu['id']) == $_GET['id'])
{
echo stripslashes($rowMenu['title']);
}
else
{
echo '<a href="?id='.$rowMenu['id'].'" style="'.$style.'">['.stripslashes($rowMenu['title']).']</a>';
}

while($rowMenu = mysql_fetch_array($resultMenu)){
if($rowMenu['id'] == $_GET['id'])
{
echo stripslashes($rowMenu['title']);
}
else
{
echo ' &middot; <a href="?id='.$rowMenu['id'].'" style="'.$style.'">['.stripslashes($rowMenu['title']).']</a>';
}}}

?>

Я чуть-чуть скобочки поправил:
<?php
$resultMenu 
mysql_query('SELECT * FROM pages ORDER BY id');
$rowMenu mysql_fetch_array($resultMenu);
if(
$rowMenu['id'] == $_GET['id'])
{
        echo 
stripslashes($rowMenu['title']);
}
else
{
        echo 
'<a href="?id='.$rowMenu['id'].'">['.stripslashes($rowMenu['title']).']</a>';
}

while(
$rowMenu mysql_fetch_array($resultMenu)){
       if(
$rowMenu['id'] == $_GET['id'])
       {
               echo 
stripslashes($rowMenu['title']);
       }
       else
       {
               echo 
' &middot; <a href="?id='.$rowMenu['id'].'">['.stripslashes($rowMenu['title']).']</a>';
       }
}
?>


19.02.2010   serdj

Приветствую всех кто в теме.
Используя данный код получается не плохой сайтик.
Только хочется всегда каких-то улучшений.
Вот к примеру взять меню.
Я уже дня три пытаюсь что бы при нажатии на ссылку определённого пункта, она, или перекрашивала свой цвет или делалась не активной.
Уже и if пробовал, и отдельно Java цеплял.
Меняет, но только всё меню сразу, или активное или не активное.
Может кто то уже встречался с таким вопрсом и как-то его уже порешал, Отзовитесь Пожалуйста.


        <?php
        
//может Вам поможет
        
while($rowMenu mysql_fetch_array($resultMenu)){
               echo 
' &middot; <a href="?id='.$rowMenu['id'].'">['.stripslashes($rowMenu['title']).']</a>';
        }
        
//меняем на:
        
while($rowMenu mysql_fetch_array($resultMenu)){
               if(
$rowMenu['id'] == $_GET['id']) $style 'color:red; font-weight:bold;';
               else 
$style 'color:blue;';
               echo 
' &middot; <a href="?id='.$rowMenu['id'].'" style="'.$style.'">['.stripslashes($rowMenu['title']).']</a>';
        }
        
?>


10.10.2009   andery

Подскажите пожалуйста бесплатный хостинг с MySQL и PHP. Буду очень благодарен!



23.08.2009   Сергей

Сам пишу в html прекрасно, но тяжело вносить
шаблонные изменения на большой количество страниц много времени
уходит и неудобно даже путем замены в ftp редакторе find replace

подстановка одного лишь header и footer не подойдет т.к.
блоки с ячейками в некоторых каталогах страниц находятся
в середине тела.

С уважением Сергей.



23.08.2009   Сергей

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

как вариант, обозначьте в админке эти блоки [code1], [code2]. А на выводе сделайте: <?
$code1 
'<table><tr><td>Блок для замены номер 1</td></tr></table>';
$code2 '<table><tr><td>Блок для замены номер 2</td></tr></table>';
$row['body'] = str_replace(array('[code1]''[code2]'), array($code1$code2), $row['body']);
echo 
stripslashes($row['body']);
?>


17.05.2009   Антон

Отвратный код, отвратное исполнение, куча ошибок и еще черт значет чего)



22.04.2009   Ильмир

Выходит ошибка после подправки админкиParse error: syntax error, unexpected \\\'&amp;lt;\\\' in adm/index.php on line 75
<br>&lt;br&gt;На 75 строчке &amp;lt;?function complete(){



10.02.2009   Graf

я тоже не понял show_pages где он находться и что с ним делать?



20.01.2009   Константин

Полезный, ресурс, грамотно изложено и подано, респект и уважуха автору. Скажи друг, кто предоставляет хостинг под ASP.Net сервисы в инете, чтоб на той же VS или BDS лепить динамические ресы.



26.07.2008   Leonid

здорово, ваш сайт очень мне помог, долго думал как мне сделать админку, я прочитал вашу статью, мне очень понравилось, тут главное вникнуть в процесс, вы мне помогли привести в порядок мозги,теперь я смогу сделать свою админку, как мне будет удобней и не выбирать из CMS, БОЛЬШОЕ ВАМ СПАСИБО!!!



09.04.2008   Тесла

может невнимательно смотрел - но не пойму show_pages - где используется?



17.03.2008   Megos

Спасибо, за информативный пост.




 
  (c) Janda.ru