Yii: Статичные страницы (создание, редактирование, удаление)

Yii: Статичные страницы (создание, редактирование, удаление) Почти всегда помимо ленты записей блога или новостей, нужно иметь возможность управлять и статичными страницами. Разберёмся как это организовать наиболее просто.

Храниться такие страницы будут в базе данных в отдельной таблице tbl_pages. Можно скопировать таблицу posts, потому что отличаться ничем для простоты у нас они не будут.

Модель для страниц Pages.php тоже стандартная (можно создать с помощью gii, либо взять содержимое из Posts и поредактировать его). Тоже самое и с контроллером и представлениями.

Самое интересное будет в формировании URL. Будем использовать свою обработку url, поэтому в конфиге, в main.php в правилах добавим

'<p_name:[\w+]+>'=>array('class' => 'application.components.UrlRule'),

и вот содержимое самого этого компонента UrlRule.php

<?php

class UrlRule extends CBaseUrlRule
{
public $connectionID = 'db';

public function createUrl($manager,$route,$params,$ampersand)
{
/*
if ($route==='orgs/view/id')  //even tried 'orgs/view' or 'orgs/index'
{
if (isset($params['Name']))
return $params['Name'];
else if (isset($params['Name']))
return $params['Name'];
}
*/
return false;  
}

public function parseUrl($manager,$request,$pathInfo,$rawPathInfo)
{
$aParts = explode('/', $pathInfo);
$projects = Projects::model()->findByAttributes(array('link' => $aParts[0]));
if (count($projects))
{
$_GET['id'] = $projects->id;
return "projects/view/{$projects->id}";
} 

$aParts = explode('/', $pathInfo);
$pages = Pages::model()->findByAttributes(array('link' => $aParts[0]));
if (count($pages))
{
$_GET['id'] = $pages->id;
return "pages/view/{$pages->id}";
}

return false;  
}
}
?>

Здесь ещё похожим образом страницы проектов Projects обрабатываются. Вот и всё.

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.