mediabet-concepture/yii2-handbook-module

package under development

Installs: 566

Dependents: 0

Suggesters: 0

Security: 0

Type:yii2-extension

v2.0.6 2020-08-24 09:04 UTC

This package is auto-updated.

Last update: 2024-03-28 09:37:26 UTC


README

Модуль для разграничения контента по доменам. Содержит сущность домена по которой можно разграничивать контент

Подключение

"require": {

"concepture/yii2-handbook-module" : "*"

},

Миграции php yii migrate/up --migrationPath=@concepture/yii2handbook/console/migrations

Подключение модуля для админки

 'modules' => [
     'handbook' => [
         'class' => 'concepture\yii2handbook\Module'
     ],
 ],

Подключение модуля для консольного приложения

 'modules' => [
    'handbook' => [
        'class' => 'concepture\yii2handbook\Module',
        'controllerMap' => [
            'sitemap' => 'concepture\yii2handbook\console\controllers\SitemapController',
            'url-history' => 'concepture\yii2handbook\console\controllers\UrlHistoryController',
        ]
    ],
 ],
 

генерация карты саита

 php yii handbook/sitemap/generate 
 

полная перегенерация карты саита

php yii handbook/sitemap/re-generate

Для каждой сущности которая должна быть в карте саита в сервисе добаялем треит concepture\yii2handbook\services\traits\SitemapSupportTrait; и реализуем вызов метода sitemapRefresh в afterModelSave и afterDelete

!!! для получения карты саита в frontend/web должны лежать стили для xml

Генерация истории урлов для сущностей

php yii handbook/url-history/re-generate

Для каждой сущности которая должна быть в истории в сервисе подключаем интерфеис UrlHistoryInterface и реализуем вызов метода refresh в afterModelSave

Yii::$app->urlHistoryService->refresh($model, null, 'site', 'page', ['route' => 'seo_name']);
 

 

Для работы с доменами в common/config/params-local.php добавить параметр в котором надо указать соответствие доменов (без http) к альясам из таблицы domains

<?php

return [
    'yii2handbook' => [
        'domainMap' => [
            'example1.loc' => 'example1',
            'example2.loc' => 'example2'
        ]
    ]
];

Получить id текущей локали из таблицы Yii::$app->localeService->getCurrentLocaleId()

Получить id текущего домена из таблицы Yii::$app->domainService->getCurrentDomainId();

Получить массив языков Yii::$app->localeService->catalog();

Получить массив доменов Yii::$app->domainService->catalog();

Получить настройку по ключу Yii::$app->settingsService->catalogValue($key);

Динамические элементы

  • Для получения настроек сео для страницы вызываем

     Yii::$app->dynamicElementsService->getDataSet($model = null);
    

    Метод вернет обьект concepture\yii2handbook\datasets\SeoData в котором будут учтены:

    • дефолтные данные сео где не указан конкретный УРЛ
    • если передана модель следом будут учтены сео данные модели
    • и после всего будут учтены элементы для текущего URL
  • Расширение для твига - в конфигурацию твига добавить расширение:

          ...
            'extensions' => 'concepture\yii2handbook\twig\DynamicElementsExtension'
          ...
    

    v2

          ...
            'extensions' => 'concepture\yii2handbook\v2\twig\DynamicElementsExtension'
          ...
    
  • Пример
          {{ de(de_constant('SettingsTypeEnum::TEXT'), de_constant('SeoSettingEnum::TITLE'), _('de','Главная страница'), 'Заголовок главной страницы') }}
          {{ de(de_constant('SettingsTypeEnum::TEXT_AREA'), 'MY_TEXT_AREA', _('de','Произвольный текст'), 'Некий текст') }}
          {{ de(de_constant('SettingsTypeEnum::TEXT_EDITOR'), 'MY_EDITOR', _('de','Произвольный текст'), 'Некий текст 2') }}
    

    v2

          {{ de(de_const('Type::TEXT'), de_const('Name::TITLE'), 'Title', {'value' : 'Index title', 'no_control' : true}) }}
          {{ de(de_const('Type::TEXT_AREA'), de_const('Name::DESCRIPTION') , 'Description', {'value' : 'Index descriptions', 'no_control' : true}) }}
          {{ de(de_const('Type::TEXT_AREA'), de_const('Name::KEYWORDS'), 'Keywords', {'value' : 'Index keywords', 'no_control' : true}) }}
          {{ de(de_const('Type::TEXT'), 'MULTIPLE_DOMAIN', 'Test multiple domain', {'value' : 'Test multiple domain', 'multi_domain' : false}) }}
          {{ de(de_const('Type::TEXT'), 'MULTIPLE_DOMAIN_2', 'Test multiple domain', {'value' : 'Test multiple domain', 'general' : true, 'multi_domain' : false}) }}
          {{ de(de_const('Type::TEXT'), 'PARAMS', 'Test multiple domain', {'value' : 'Test {token} params', 'value_params' : {'token' : 'abc'}}) }}
    
  • Консольные команды
    • Подключение (например console\config\main.php)
          [
              ...
              'modules' => [
                  ...
                      'handbook' => [
                          'class' => 'concepture\yii2handbook\Module',
                          'controllerMap' => [
                              ...
                              'dynamic-elements' => 'concepture\yii2handbook\console\controllers\DynamicElementsCommand',
                              ...
                          ]
                      ],
                  ...
              ]
              ...
          ]
      
    • Пример вызова php yii handbook/dynamic-elements/replacement / /replacement --alias=alias

      Динамический индексируемый файл (robots.txt)

      Подключение :

  • В необходимом контроллере подключается действие (например frontend\controllers\SiteController.php)

          public function actions()
          {
              $actions = parent::actions();
              ...
              $actions['robots'] = [
                  'class' => 'concepture\yii2handbook\actions\RobotsAction',
              ];
              ...
            
              return $actions;
          }
    
  • Прописать в роутинге правило (например frontend\config\routes.php)
         return [
             ...
             [
                 'pattern' => 'robots',
                 'route' => 'site/robots',
                 'suffix' => '.txt'
             ],
             ...
         ];
    

Роутинг по доменам

  • Подключение (например frontend\config\main.php)
        ...
          'components' => [
              'urlManager' => [
                  'class' => 'concepture\yii2handbook\components\routing\DomainUrlManager',
                  'rules' => require __DIR__ . '/routes.php',
                  ...
              ],
          ],
        ...
    
  • Правила роутинга (например frontend\config\routes.php)
            ...
              [
                'patterns' => [
                    DomainEnum::A => 'objects',
                    DomainEnum::B => 'subjects',
                ],
                'route' => 'object/index'
              ],
              [
                'patterns' => [
                    DomainEnum::A => "objects/<seo_name:({$seo_name_regexp})>",
                    DomainEnum::B => "subjects/<seo_name:({$seo_name_regexp})>",
                ],
                'route' => 'object/view'
              ],
              [
                  'pattern' => 'robots',
                  'route' => 'site/robots',
                  'suffix' => '.txt'
              ]
            ...
    

    Hreflag для мультидоменов

  • подключение в конфиге (напирмер frontend\config\main.php)

      ...
          'view' => [
            ...
              'renderers' => [
                  'twig' => [
                    ...
                        'extensions' => [
                            ...
                                'concepture\yii2handbook\components\routing\HreflangExtension'
                            ...
                        ],
                    ...
    
                  ],
              ]
            ...
          ],    ...
    
  • подключение на шаблоне (frontend\views\layout\main.html.twig)
      ...
      <head>
      ...
          {{ hreflang() }}
      ...
      </head>
      ...
    
  • подключение доменов ( пример common/config/params-local.php ) параметр hreflang включает домен
      return [
          'yii2handbook' => [
              'domainMap' => [
                  'alias.loc' => [
                      'alias' => 'alias',
                      'locale' => 'ru',
                      'hreflang' => 'ru-ru'
                  ]
              ]
          ]
      ];
    

    Модуль сортировки для контроллера

  • Создать сущность object (Служебные сущности - таблица entity_type)
  • Подключение в контроллере (пример backend\controllers\ObjectController)

    ...
      	use concepture\yii2handbook\actions\PositionSortIndexAction;
      	use kamaelkz\yii2admin\v1\actions\EditableColumnAction;
      	use kamaelkz\yii2admin\v1\actions\SortAction;
      	use concepture\yii2handbook\services\EntityTypePositionSortService;
      	use kamaelkz\yii2admin\v1\controllers\traits\ControllerTrait;
    ...
      public function actions(): array
      {
          $actions = parent::actions();
        
          return array_merge($actions,[
              ...
              PositionSortIndexAction::actionName() => [
                  'class' => PositionSortIndexAction::class,
                  'entityColumns' => [
                      'id',
                      'name',
                      'seo_name',
                  ],
                  'labelColumn' => 'name',
              ],
              EditableColumnAction::actionName() => [
                  'class' => EditableColumnAction::class,
                  'serviceClass' => EntityTypePositionSortService::class
              ],
              SortAction::actionName() => [
                  'class' => SortAction::class,
                  'serviceClass' => EntityTypePositionSortService::class
              ]
              ...
          ]);
      }
    ...
    
  • Подключение на вьюшке (backend\object\index.php)
    ...
      use concepture\yii2handbook\actions\PositionSortIndexAction;
    ...
      $this->viewHelper()->pushPageHeader(
          [PositionSortIndexAction::actionName()],
          Yii::t('yii2admin', 'Сортировка'),
          'icon-sort'
      );
    ...
    

    Менеджер очередей Beanstalk

    Подробнее

    Компонент кэша

    Подробнее

    Сео блоки

  • подключение в конфиге (напирмер frontend\config\main.php)

      ...
          'view' => [
            ...
              'renderers' => [
                  'twig' => [
                    ...
                        'extensions' => [
                            ...
                                    'concepture\yii2handbook\twig\SeoBlockExtension'
                            ...
                        ],
                    ...
    
                  ],
              ]
            ...
          ],    ...
    
  • подключение на шаблоне (frontend\views\layout\main.html.twig)
      ...
      <head>
      ...
              {{ seo_block(c('SeoBlockPositionEnum::HEAD')) }}
      ...
      </head>
      ...
    
  • подключение элемента меню в админке
      ...
      'yii2admin-navigation' => [
          ...
          [
              'label' => Yii::t('yii2admin', 'SEO блоки'),
              'url' => ['/handbook/seo-block/index'],
              'active' => [
                  'rules' => [
                      'c' => ['seo-block']
                  ]
              ]
          ],
          ...
      ]
      ...