sunnyblik (sunnyblik) wrote,
sunnyblik
sunnyblik

Category:

Yii CMS 2

Обновил: 28.11.2012
Речь пойдет об yii-cms-2.0, которая в данный момент активно разрабатывается разработчиками:Я буду рассматривать 2 версию, но также существует стабильная 1 версия

Разворачиваем на своем сервере Yii CMS 2.0
1. Скачиваем и распаковываем.
2. Заходим на http://site.ru/install.php 
Проделываем все шаги установки. (Указываем хост, логин и пароль от заранее заведенной БД MySQL.)
3. Все! Теперь мы видим некий сайт по адресу: http://site.ru, а также можно зайти в админ панель: http://site.ru/admin
4. можем зайти по адресу: http://site.ru/docs/ и прочитать документацию, которая идет с yii cms 2.0

Полезные сведения:
1. В файле  development.php храняться настройки подключения к БД MySQL. (этот файл создается в случае успешной установки)
2. Папки: assets, protected/runtime. (Т.к. это служебные директории и их содержимое не коммитится)

Особенности Yii CMS:
protected/config/main.php -конфигурационный файл, конфигуратор класса Application.
Что он делает:
1. Указывает все модули

В Yii, как известно, для того чтобы воспользоваться модулем, в конфигурации приложения его необходимо указать. Тут все модули указываются в конфигурационном файле автоматически (скрипт protected/config/main.php пробегается по всем существюущим папкам-модулям, которые находятся  в папке protected/modules)
Отрывок кода, который это делает:
$modules_dirs   = scandir(MODULES_PATH);
foreach ($modules_dirs as $module)
{
  if ($module[0] == ".") {
    continue;
  }
  $modules[] = $module;
}
2. В массиве указываются значения свойств для экземпляра класса Application
Отрывок кода:
return array(
  'language' => 'ru',
  'basePath' => dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
  'name'   => '',
  'preload' => array('log'),
  'import'  => array(
    'application.components.*',
    'application.components.interfaces.*',
  ),
  'modules'  => $modules,
  'components' => array(
    'executor' => array(
      'class' => 'application.components.CommandExecutor',
    ),
    'messages' => array(
      'class' => 'CDbMessageSource',
      'sourceMessageTable'   => 'languages_messages',
      'translatedMessageTable' => 'languages_translations'
    ),
    'bootstrap'=>array(
      'class'=>'application.components.bootstrap.components.Bootstrap'
    ),
При создании нового экземпляра класса Application, публичным свойствам присваиваются значения этого массива. Все эти св-ва будут доступны через Yii:app()->, Например, чтобы получить свойство name нашего Application необходимо написать: Yii:app()->name.
Дальше у нас идет присваивание компонентов. Помещаем в компоненты объект executor , который явялется экземпляром класса , который лежит в application.components.CommandExecutor (т.е. выполняется new указанный класс)
И теперь через Yii:app->executor будет доступен объект класса application.components.CommandExecutor

Замечание: Все компоненты в Yii создаются через функцию Yii:createComponent
Замечание: С помощью чего мы создаем объект? (Application?) на основе этой конфигурации?
c помощью Yii::createComponent, на основе данной конфигурации создается/конфигурируется Yii:app? ... И она делает new и for each присваивает все public свойства. 




Формы.
Формы лежат в contents/forms/

Делаем страницы на сайте через модель Page
Задача:
При построении любого сайта, есть необходимость выводить страница статикой. Как и где лучше это осуществить?
Решение:
Для этого нам понадобится модель Page, которая находиться в content


Как сделать для статич страниц теги: title, description, keywords...  и где их хранить?
К Page они прикручиваются через: 
'meta_tags'     => array(
            'type' => 'meta_tags'
        ),
в форме 
+ MetaTagBehavior

Получается, что у всех наших страниц будет адрес вида: site.ru/content/*** ?
Адрес можно сделать абсолютно любой, для этого есть роутинг
'/page/<id:\d+>' => 'content/page/view',
'/page/<alias:\w+>' => 'content/page/view',
'/any/<alias:\w+>/page/hello' => 'content/page/view',
Таким образом любой url мы можем перенаправить на любой контроллер и в нем подключить модель Post.

a
s
Роутинг. Красивые url на сайте.
Роутинг должен анализировать входящий url и далее понять какой вызывать контроллер и action.
Например, правило :
'/page/<id:\d+>' => 'content/page/view',
Обозначает:
слева: что вбивается в адресную строку в браузеле = > что отвечает за обработку
page/произвольное колво чисел => модуль content / вызывается котроллер Page / экшен View

Далее, уже в самом экшене, в супер глобальном массиве _GET можно обратиться к id и получить его значение
По умолчанию в Yii сделано, что все настройки роутинга пишутся в main.php
В Yii CMS 2 - это сделано след. образом: В каждой папке модуля, в корне лежит файл *Module.php, в методе rout/

Замечание: в момент, когда инициалзириуется приложение, создаются все модули (content, main, docs, ...)  у каждого модуля берется массив, который пропсывается в методе routes() и merge (объединиятся) в один большой массив.


Behaviors
Т.к. в пхп нет множественного наследования, то используется behaviors. Подробнее можно почитать в официальной документации.
Tags: yii cms 2
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 3 comments