Skip to content

Commit

Permalink
Version 1.13b
Browse files Browse the repository at this point in the history
  • Loading branch information
Ilyas Ronef committed Oct 17, 2018
2 parents 4f6c466 + 8b12fa8 commit 5ffcc79
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 38 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
# ddMenuBuilder changelog
## Version 1.13b (2018-10-17)
* \* Attention! PHP >= 5.6 is required.
* \* ddMenuBuilder snippet:
* \* Wrong type of “providerParams” was fixed.
* \* ddMenuBuilder class:
* \* Small refactoring.
* \* Optimization:
* \- ddMenuBuilder->generate: Redudnand “array_merge” removed,
* \- ddMenuBuilder->generate: Убран проход по всем документам в дереве который определял где находится активный документ.

## Version 1.12 (2017-08-30)
* \* Menu item active status is no logner depends on the “show_in_menu” children flag.
* \+ Added JSON format support for the “providerParams” and “placeholders” parameters.
Expand Down
61 changes: 31 additions & 30 deletions assets/snippets/ddMenuBuilder/ddMenuBuilder.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* modx ddMenuBuilder class
* @version 2.1.2 (2017-08-30)
*
* @uses PHP >= 5.4.
* @uses PHP >= 5.6.
* @uses MODXEvo >= 1.1.
* @uses MODXEvo.library.ddTools >= 0.16.1.
*
Expand All @@ -12,6 +12,7 @@

class ddMenuBuilder {
private $hereDocId;
private $hereDoc_parents = [];
private $templates = [
'item' => '<li><a href="[~[+id+]~]" title="[+pagetitle+]">[+menutitle+]</a></li>',
'itemHere' => '<li class="active"><a href="[~[+id+]~]" title="[+pagetitle+]">[+menutitle+]</a></li>',
Expand All @@ -30,7 +31,7 @@ class ddMenuBuilder {

/**
* __construct
* @version 1.2.6 (2016-10-24)
* @version 1.3 (2018-09-24)
*
* @param $params {stdClass} — The object of params. Default: new stdClass().
* @param $params->showPublishedOnly {boolean} — Брать ли только опубликованные документы. Default: true.
Expand Down Expand Up @@ -63,6 +64,17 @@ public function __construct(stdClass $params = NULL){
$this->hereDocId = $modx->documentIdentifier;
}

//Получим все id родителей текущего документа.
$this->hereDoc_parents = [$this->hereDocId];
$hereDoc_parentId = $this->hereDocId;

while ($hereDoc_parentId > 0){
$this->hereDoc_parents[] = $hereDoc_parentId = $modx->getParent($hereDoc_parentId)['id'];
}
$this->hereDoc_parents = array_reverse($this->hereDoc_parents );
//Не null, а 0
$this->hereDoc_parents[0] = 0;

//Если шаблоны переданы
if (isset($params->templates)){
//Перебираем шаблоны объекта
Expand Down Expand Up @@ -257,7 +269,7 @@ public function prepareProviderParams($params = []){

/**
* generate
* @version 3.0.3 (2017-08-30)
* @version 3.1 (2018-09-24)
*
* @desc Сторит меню.
*
Expand All @@ -270,9 +282,7 @@ public function prepareProviderParams($params = []){
*/
public function generate($params){
//Defaults
$params = (object) array_merge([
'depth' => 1
], (array) $params);
$params = (object) $params;

global $modx;

Expand Down Expand Up @@ -313,32 +323,31 @@ public function generate($params){
//И для вывода тоже пустые
$doc['children'] = $children;

//Если это папка (т.е., могут быть дочерние)
if ($doc['isfolder']){
//Получаем детей (вне зависимости от того, нужно ли их выводить)
$children = $this->generate([
'where' => [
'parent' => '`parent` = '.$doc['id'],
//Any hidemenu
'hidemenu' => '`hidemenu` != 2'
],
'depth' => $params->depth - 1
]);

//Если надо выводить глубже
if ($params->depth > 1){
//Если надо выводить глубже
if ($params->depth > 1){
//Если это папка (т.е., могут быть дочерние)
if ($doc['isfolder']){
//Получаем детей (вне зависимости от того, нужно ли их выводить)
$children = $this->generate([
'where' => [
'parent' => '`parent` = '.$doc['id'],
//Any hidemenu
'hidemenu' => '`hidemenu` != 2'
],
'depth' => $params->depth - 1
]);
//Выводим детей
$doc['children'] = $children;
}
}

//Если вывод вообще нужен (если «$params->depth» <= 0, значит этот вызов был только для выяснения активности)
if ($params->depth > 0){
//Получаем правильный шаблон для вывода текущего пункта
//Получаем правильный шаблон для вывода текущеёго пункта
$tpl = $this->getOutputTemplate([
'docId' => $doc['id'],
'docPublished' => $doc['published'],
'hasActiveChildren' => $children['hasActive'],
'hasActiveChildren' => in_array($doc['id'], $this->hereDoc_parents),
'hasChildrenOutput' => $doc['children']['outputString'] != ''
]);

Expand All @@ -356,14 +365,6 @@ public function generate($params){
]);
}
}

//Если мы находимся на странице текущего документа или на странице одного из дочерних (не важно отображаются они или нет, т.е., не зависимо от глубины)
if (
$doc['id'] == $this->hereDocId ||
$children['hasActive']
){
$result['hasActive'] = true;
}
}
}

Expand Down
16 changes: 8 additions & 8 deletions ddMenuBuilder.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<?php
/**
* ddMenuBuilder
* @version 1.12 (2017-08-30)
* @version 1.13b (2018-10-17)
*
* @desc Fresh, simple and flexible template-driven menu builder. Initially inspired by combination of the Wayfinder and Ditto advantages with significant code simplification.
*
* @uses PHP >= 5.4.
* @uses PHP >= 5.6.
* @uses MODXEvo >= 1.1.
* @uses MODXEvo.library.ddTools >= 0.20.
*
Expand Down Expand Up @@ -49,9 +49,9 @@
* @example &placeholders=`{"pladeholder1": "value1", "pagetitle", "My awesome pagetitle!"}`.
* @example &placeholders=`pladeholder1=value1&pagetitle=My awesome pagetitle!`.
*
* @link http://code.divandesign.biz/modx/ddmenubuilder/1.12
* @link http://code.divandesign.biz/modx/ddmenubuilder/1.13b
*
* @copyright 2009–2017 DivanDesign {@link http://www.DivanDesign.biz }
* @copyright 2009–2018 DivanDesign {@link http://www.DivanDesign.biz }
*/

//Подключаем класс (ddTools подключится там)
Expand All @@ -76,10 +76,10 @@
is_numeric($startId)
){
//По умолчанию на 1 уровень
$providerParams = [
'parentIds' => $startId,
'depth' => (isset($depth) && is_numeric($depth) ? $depth : 1)
];
$providerParams = '{
"parentIds": "'.$startId.'",
"depth": '.(isset($depth) && is_numeric($depth) ? $depth : 1).'
}';
}

$ddMenuBuilder_params = new stdClass();
Expand Down

0 comments on commit 5ffcc79

Please sign in to comment.