Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 530

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/cache.php on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/theme.php on line 623
Seo-компонент для CakePHP - Программируем на CakePHP


Сен 03 2008

Seo-компонент для CakePHP

Раздел: Веб-разработкаМета @ 23:03

При создании современных сайтов приходится обязательно учитывать особенности работы поисковых машин с контентом страниц. Во всех проектах, написанных с использованием CakePHP тоже нужно реализовывать seo-функции, хотя бы — простановку уникальных заголовков и мета-тегов для всех страниц. А поскольку обычно страницы сайта на CakePHP обрабатываются разными контроллерами, задача может стать совсем нетривиальной.

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

<?
class SeoComponent extends Object {

var $controller;
var $not_found = false;

function startup(&$controller) {
$this->controller = &$controller;
if (substr_count($_SERVER['REQUEST_URI'], ‘admin’) == 0) {
if (strpos($_SERVER['REQUEST_URI'], “?”) == null) {
$uri = $_SERVER['REQUEST_URI'];
} else {
$uri = substr($_SERVER['REQUEST_URI'], 0, strpos($_SERVER['REQUEST_URI'], “?”));
}
if (!empty($uri)) {
$meta = $this->controller->Seo->find(array(’uri’=>$uri));
} else {
$meta=null;
}
if (!is_null($meta)) {
$this->controller->set(’seo_keywords’, $meta['Seo']['keywords']);
$this->controller->set(’seo_description’, $meta['Seo']['description']);
$this->controller->pageTitle = $meta['Seo']['title'];
} else {
$this->not_found = true;
}
}
}
}

?>

Компонент проверяет адрес запрошенной страницы. Если адрес содержит слово «admin» - поиск мета-тегов не производится (считаем, что находимся в админке). Если адрес страницы содержит параметры после знака вопроса — откидываем их. По оставшемуся URL — ищем запись в таблице Seo.

Как установить компонент?

1. Сохранить его исходный код в файл “app/controllers/components/seo.php”.

2. Создать в базе данных таблицу seos с текстовыми полями uri, keywords, description и title:

CREATE TABLE IF NOT EXISTS `seos` (
`uri` varchar(255) NOT NULL,
`keywords` text NOT NULL,
`description` text NOT NULL,
`title` text NOT NULL,
PRIMARY KEY (`uri`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

3. Создать в папке app/models/ модель seo.php:

<?php
class Seo extends AppModel {
var $name = ‘Seo’;
}
?>

4. В каждом контроллере, где нужно выдавать в макет мета-теги, добавить в заголовок класса:

<?php
class ArticlesController extends AppController {

var $name = ‘Articles’;
var $helpers = array(’Html’, ‘Form’, ‘Javascript’ );
var $layout = ‘main’;
var $uses = array(’Cat’, ‘Content’, ‘Admin’, ‘Seo’);
var $components = array(’Validation’, ‘Seo’);

5. И, наконец, в макете (layout) — написать для вывода мета-тегов:

<title><?php echo $title_for_layout;?></title>
<meta name=”description” content=”<?php if(!empty($seo_description)) echo $seo_description; else echo ”; ?>”/>
<meta name=”keywords” content=”<?php if(!empty($seo_keywords)) echo $seo_keywords; else echo ”; ?>”/>

Для заполнения и редактирования значений мета-тегов можно использовать авто-сгенерированный вид и контроллер. Это уже свободное творчество :).

Теги: , ,

Напиши комментарий!