如何使用获取页面树在OctoberCMS中获取静态页面下拉菜单? [英] How to get static page dropdown in OctoberCMS with get page tree?

查看:109
本文介绍了如何使用获取页面树在OctoberCMS中获取静态页面下拉菜单?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据我的问题,我在 OctoberCMS的静态页面内的静态页面下拉列表.

添加$ pageList-> getPageTree(true)时出现问题.子页面未显示.我当前的代码是从$ pageObject-> subpages重复foreach,这不是一个好习惯.

I have problem when adding $pageList->getPageTree(true). The child pages did not display. My current code is repeating foreach from $pageObject->subpages which is not a good practice.

下面是我的代码示例:

Plugin.php

Plugin.php

<?php namespace MyPlugin\CustomPlugin
use System\Classes\PluginBase;
public function boot() {
    \RainLab\Pages\Classes\Page::extend(function($model) {
        $model->addDynamicMethod('getPageOptions', function() {
            $theme = \Cms\Classes\Theme::getEditTheme();
            $pageList = new \RainLab\Pages\Classes\PageList($theme);
            $pages = [];
            foreach ($pageList->getPageTree(true) as $name => $pageObject) {
                $pages[$pageObject->page->url] = $pageObject->page->title;
                if ($pageObject->subpages) {
                    foreach ($pageObject->subpages as $name => $pageObject) {
                        $pages[$pageObject->page->url] = '&nbsp;&nbsp;&nbsp;' . $pageObject->page->title;
                        if ($pageObject->subpages) {
                            foreach ($pageObject->subpages as $name => $pageObject) {
                                $pages[$pageObject->page->url] = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . $pageObject->page->title;
                            }
                        }
                    }
                }
            }
            return $pages;
        });
    });
}

感谢任何人都可以提供帮助.

Appreciate if anyone could help.

推荐答案

可能会帮助您.

function onStart() {
    $theme = \Cms\Classes\Theme::getEditTheme();
    $pageList = new \RainLab\Pages\Classes\PageList($theme);    
    $treePageList = $pageList->getPageTree(true);    
    $pages = [];
    $this->getRecursivePage($pages, $treePageList);
    dd($pages);
}

function getRecursivePage(&$pages, $subpages, $level = 0) {        
    $level++;
    foreach($subpages as $pageArr) {        
        $pages[$pageArr->page->url] = 
               str_repeat('-',$level) . ' ' . $pageArr->page->title;                     
        if(count($pageArr->subpages) > 0) {            
            $this->getRecursivePage($pages, $pageArr->subpages, $level);
        }        
    }    
}

输出

array:9 [▼
  "/content" => "- Content"
  "/content/pages" => "-- Static Pages"
  "/content/content" => "-- Content"
  "/content/models" => "-- Models"
  "/content/urls" => "-- URLs"
  "/content/urls/tesets" => "--- tesets"
  "/test-sp" => "- test-sp"
  "/test-sp/oks" => "-- oks"
  "/test" => "- test"
]

在这里您可以将-替换为&nbsp;或仅删除该部分[ I added because you had that in code so, may be useful to you. ]

here you can just replace - to &nbsp; or just remove that part [ I added because you had that in code so, may be useful to you. ]

为您的代码

public function boot() {
  \RainLab\Pages\Classes\Page::extend(function($model) {
      $model->addDynamicMethod('getPageOptions', function() {
          $theme = \Cms\Classes\Theme::getEditTheme();
          $pageList = new \RainLab\Pages\Classes\PageList($theme);
          $treePageList = $pageList->getPageTree(true);
          $pages = [];
          $this->getRecursivePage($pages, $treePageList);
          return $pages;
      });
  });
}

public function getRecursivePage(&$pages, $subpages, $level = 0) {        
    $level++;
    foreach($subpages as $pageArr) {        
        $pages[$pageArr->page->url] = 
               str_repeat('-',$level) . ' ' . $pageArr->page->title;                     
        if(count($pageArr->subpages) > 0) {            
            $this->getRecursivePage($pages, $pageArr->subpages, $level);
        }        
    }    
}

如有疑问,请发表评论.

If any doubt please comment.

这篇关于如何使用获取页面树在OctoberCMS中获取静态页面下拉菜单?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆