Вносить изменения в папке /ygin запрещено, т.к. это приведёт к затиранию этих изменений в процессе обновления.

Если возникло желание изменить стили оформления какого-либо модуля, поставляемого вместе с ygin или же изменить программный код, необходимо выполнить переопределение соответствующих файлов модуля.

1. Переопределение представлений и ресурсов (assets)

Для переопределения файлов модуля необходимо:

  1. Переводим сайт в режим отладки. Для этого в файле /protected/config/local.php изменяем константу YII_DEBUG в значение true.
    defined('YII_DEBUG') or define('YII_DEBUG', true);
    defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3);
    
  2. Перейти по ссылке в браузере ваш_домен.ru/override/, где галочками отметить именно те файлы, которые вам необходимо изменить. В процессе переопределения соответствующие файлы представлений и ресурсов будут созданы в папке /themes.

Рассмотрим в качестве примера изменение стилей оформления модуля Новости

  1. Переопределяем .css файлы отображения списка и одиночной новости.
    Переопределение файлов новостей
  2. Находим появившиеся файлы в папке /themes/business/views/news/assets/news.css, в нём можно вносить изменения в существующие стили оформления новостей, не опасаясь, что они будут затёрты в процессе обновления системы.

2. Переопределение контроллеров

1. Создаем класс контроллера. Например для переопределения ProductController модуля shop создаем класс: protected/modules/shop/controllers/MyProductController.php

2. Собственно для переопределения контроллера необходимо воспользоваться стандартным функционалом yii (конфиг приложения config/project.php):

'modules' => array(
    'ygin.shop' => array(
      'controllerMap' => array(
        'product' => 'application.modules.shop.controllers.MyProductController',
      ),
    ),

3. Переопределение моделей

1. Создаем класс новой модели. Например для модели новостей MyNews класс будет располагаться тут: protected/modules/news/models/MyNews.php:

class MyNews extends News {
  // добавляем новое свойство
  public $newVar = null;

  // переопределяем правило для урлов
  public function getUrl() {
    ...
  }
}

Имя класса должно совпадать с именем файла.

2. В конфиге приложения protected/config/project.php прописывает соответствия моделей:

return array(
  // используемые в проекте модули
  'modules' => array(
  ...
  ),
  
  'components'=>array(
  ),
  
  'models' => array(
    'News' => 'MyNews', // или 'application.modules.news.models.MyNews', если модель не импортирована
  ),
);

4. Переопределение класса модуля

1. Создаем класс модуля. Например, переопределяем модуль Интернет-магазина: protected/modules/shop/MyShopModule.php

2. Рассмотрим исходник класса:

//импортируем родительский модуль
yii::import('ygin.modules.shop.ShopModule');
class MyShopModule extends ShopModule { 
  public function init() {
    parent::init();
    $this->setImport(array(
      //импортируем родительские модели по необходимости
      'ygin.modules.shop.models.*',
      'ygin.modules.shop.controllers.*',
    ));
    //т.к. по-умолчанию контроллеры ищутся в папке controllers текущего модуля
    //то необходимо указать где искать контроллеры
    $this->setControllersPath('ygin.modules.shop.controllers');

    // либо можем указать базовый путь модуля на родительский:
    $this->setBasePath(Yii::getPathOfAlias('ygin.modules.shop'));
  
    ...
}

3. В конфиге указываем новый класс модуля:

'modules' => array(
    'ygin.shop' => array(
      'class' => 'application.modules.shop.MyShopModule',
   ),
),

О том как создать свои новые компоненты, модули читайте в отдельном разделе.

16 июня 2013

Автор: Огнёв Иван, Абрамов Михаил

Комментарии (6)

Добавить комментарий
  • Николай
    19.08.2014, 21:00:23

    Получил ошибку Необходимый для отображения asset "D:\OpenServer\domains\helper\protected\assets\bootstrap\css\bootstrap-responsive.min.css" не существует.

    Где его скачать?
    • Николай
      19.08.2014, 23:13:36

      http://getbootstrap.com/2.3.2/getting-started.html
      тут все обнаружил
  • Олег
    21.08.2014, 0:55:29

    Потом получил:copy(C:/www/ygin/www/protected/assets/bootstrap/img/glyphicons-halflings.png): failed to open stream: No such file or directory
    • Олег
      21.08.2014, 1:04:31

      Прошу прощения, по твоей ссылке есть.
  • Фёдор
    26.06.2015, 0:35:07

    Карта сайта

    Я правильно понимаю что надо допиливать модуль карты сайта чтоб он умел генерировать файл sitemap.xml ? Или есть готовое решение в системе?
    • Alex
      26.06.2015, 9:39:11

      Да так и есть. Для генерации сайтмапа много всяких сторонних сервисов есть