Application sitemap and navigation manager module for Yii 2.0 Framework
⚠️ Breaking changes in 0.14.0 and 0.18.0⚠️ copy pages is removed in versions > 2.5.0
data structure
and public properties
are updated and query menu items from now on via domain_id
- URL manager from codemix/yii2-localeurls configured in application
- role based access control;
auth_items
for everymodule_controller_action
The preferred way to install this extension is through composer.
Either run
composer require dmstr/yii2-pages-module "*"
or add
"dmstr/yii2-pages-module": "*"
to the require section of your composer.json
file.
Run migrations
./yii migrate \ --disableLookup=1 \ --migrationPath=@vendor/dmstr/yii2-pages-module/migrations
Enable module in application configuration
// module configuration 'pages' => [ 'class' => 'dmstr\modules\pages\Module', 'layout' => '@admin-views/layouts/main', 'roles' => ['Admin', 'Editor'], 'defaultPageLayout' => '@app/modules/frontend/layouts/main', 'availableRoutes' => [ 'site/index' => 'Index Route', ], 'availableViews' => [ '@app/views/site/index.php' => 'Index View', ], ], // if used want a url suffix, e.g. '.html', add Url rules for that 'urlManager' => [ ... 'rules' => [ '<pagePath:[a-zA-Z0-9_\-\./\+]*>/<pageSlug:[a-zA-Z0-9_\-\.]*>-<pageId:[0-9]*>.html' => 'pages/default/page', '<pageSlug:[a-zA-Z0-9_\-\.]*>-<pageId:[0-9]*>.html' => 'pages/default/page', ], ... ], // register frontend asset for hiding pages via CookieButton 'on '. \yii\web\Application::EVENT_BEFORE_ACTION => function () { \dmstr\modules\pages\assets\PagesFrontendAsset::register(Yii::$app->controller->view); },
Use settings module to configure additional controllers
- Add one controller route per line to section
pages
, keyavailableRoutes
pages.availableRoutes
- routes per access_domain (for non-admin users)pages.availableViews
- views per access_domain (for non-admin users)pages.availableGlobalRoutes
- global routes (for admin users)pages.availableGlobalViews
- global views(for admin users)
find a root node / leave node
by domain_id
i.e. root
$menuItems = \dmstr\modules\pages\models\Tree::getMenuItems('root');
use for example with bootstrap Navbar
echo yii\bootstrap\Nav::widget( [ 'options' => ['class' => 'navbar-nav navbar-right'], 'activateItems' => false, 'encodeLabels' => false, 'activateParents' => true, 'items' => Tree::getMenuItems('root'), ] );
- visit
/pages
to create a root-node for your current application language. - click the tree icon
- enter
name identifier (no spaces and special chars)
as Domain ID and Menu name and save - create child node
- assign name, title, language and route/view
- save
Now you should be able to see the page in your Nav
widget in the frontend of your application.
We use the \dmstr\activeRecordPermissions\ActiveRecordAccessTrait
to have a check access behavior on active record level
- Owner Access
- Read Access
- Update Access
- Delete Access
available since 0.12.0-beta1
👷 A workaround for creating anchor links is to define a route, like /en/mysite-2
in the settings module. On a node you can attach an anchor by using Advanced URL settings, with {'#':'myanchor'}
.
It is recommended to create a new entry in Tree mode.
Find sibling page in target language
/** * Find the sibling page in target language if exists * * @param string $targetLanguage * @param integer $sourceId * @param string $route * * @return Tree|null * @throws \yii\console\Exception */ public function sibling($targetLanguage, $sourceId = null, $route = self::DEFAULT_PAGE_ROUTE); Example 1: --- // page id 12 is a node in language 'en' $sourcePage = Tree::findOne(12); // returns corresponding page object in language 'de' or null if not exists $targetPage = $sourcePage->sibling('de'); Example 2: --- // find by params $targetPage = (new Tree())->sibling('de', 12, '/pages/default/page')
Requirements:
- docker >=1.9.1
- docker-compose >= 1.6.2
Codeception is run via "Potemkin"-Phundament.
cd tests
Start test stack
make all
Run tests
make run-tests
2.5.10
- Removed localized root node message
- Updated kartik-v/yii2-tree-manager requirement to ^1.1.2
- Update Tree model to support new child_allowed attribute (since kartik-v/yii2-tree-manager 1.0.9)
- Improved permission check for page nodes so allowed child nodes in not allowed parents do not show up