带有JSON数据的Vue.js动态OctoberCMS菜单?

问题描述 投票:0回答:1

我想知道vue.js如何使路由器具有动态路由而不是静态路由,从而基于October静态菜单项和Pages呈现菜单?

感谢您的帮助。

[在十月的后端,我使用常规MDBootstrap及其以下部分来渲染基于“静态页面”和“菜单”的动态菜单:

    <!-- Navbar Logo -->
    <a class="navbar-brand" href="#">Navbar</a>

    <!-- Collapse button -->
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
        aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
        {% if staticMenu.menuItems %}
        {% set items = staticMenu.menuItems %}
        <!-- Links -->
        <ul class="navbar-nav mr-auto">
            {% for item in items %}
                <li class="nav-item {{ item.isActive or item.isChildActive ? 'active' : '' }}
                    {{ item.items ? 'dropdown btn-group' : '' }}"
                >
                    <a class="nav-link {% if item.items %}dropdown-toggle {% endif %}"
                            {% if item.items %} id="dropdownMenu{{ item.title|replace({' ':'-'}) }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"{% endif %}
                       href="{{ item.url }}"
                    >
                        {{ item.title }}

                        {% if item.items %}<span class="sr-only">(current)</span>{% endif %}
                    </a>

                    {% if item.items %} <!-- Sous-menu -->
                        <div class="dropdown-menu dropdown-primary"
                            aria-labelledby="dropdownMenu{{ item.title|replace({' ':'-'}) }}">
                            {% for child in item.items %}
                                <a class="dropdown-item" href="{{ child.url }}">{{ child.title }}</a>
                            {% endfor %}
                        </div>
                    {% endif %}
                </li>
            {% endfor %}
        {% endif %}
        </ul>
        <!-- Links -->
    </div>
    <!-- Collapsible content -->

    <!-- Search form -->
    <form class="form-inline">
        <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
    </form>

    <ul class="navbar-nav ml-auto nav-flex-icons">
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink-333" data-toggle="dropdown"
          aria-haspopup="true" aria-expanded="false">
          <i class="fas fa-user"></i>
        </a>
        <div class="dropdown-menu dropdown-menu-right dropdown-primary"
          aria-labelledby="navbarDropdownMenuLink-333">
          <a class="dropdown-item {{ this.page.baseFileName == 'login' ? 'active' : '' }}" href="{{ 'login'|page }}">
            {% if not user %}
                Login
            {% else %}
                My profile
            {% endif %}
          </a>
          {% if user %}
          <a class="dropdown-item" data-request="onLogout" data-request-data="redirect: '/logout'">Sign out</a>
          {% endif %}
          </a>
        </div>
      </li>
    </ul>

</nav>
<!--/.Navbar-->

如果更改后端项目,则项目将正确呈现和修改。

现在,我想使用MDB Vue将前端切换到Vue.js应用程序。

在示例路线中,路线始终是静态的,在漂亮的Watch + Learn Rentacar应用程序中,路线也始终是https://watch-learn.com/creating-rent-car-app-vue-and-october/creating-rentacar-app-with-vue-and-october-homepage-ui

我制作了一个带有以下示例(https://mdbootstrap.com/docs/vue/navigation/navbar)的菜单组件。现在已经渲染了,我想知道如何在vue组件中像Twig一样解析后端项目???

菜单组件来源(静态)为:

<template>
  <div>
    <!--Navbar-->
    <mdb-navbar dark color="primary" name="Your Logo" href="#">
      <mdb-navbar-toggler>
        <mdb-navbar-nav>
          <mdb-nav-item to="/navigation/navigation-v1">Version 1</mdb-nav-item>
          <mdb-nav-item to="/navigation/navigation-v2" active>Version 2</mdb-nav-item>
          <mdb-nav-item to="/navigation/navigation-v3">Version 3</mdb-nav-item>
          <mdb-nav-item to="/navigation/navigation-v4">Version 4</mdb-nav-item>
          <!-- mdbDropdown -->
          <mdb-dropdown tag="li" class="nav-item">
            <mdb-dropdown-toggle slot="toggle" tag="a" navLink color="primary" waves-fixed>Dropdown</mdb-dropdown-toggle>
            <mdb-dropdown-menu>
              <mdb-dropdown-item>Action</mdb-dropdown-item>
              <mdb-dropdown-item>Another action</mdb-dropdown-item>
              <mdb-dropdown-item>Something else here</mdb-dropdown-item>
            </mdb-dropdown-menu>
          </mdb-dropdown>
        </mdb-navbar-nav>
        <!-- Search form -->
        <form>
          <mdb-input type="text" class="text-white" placeholder="Search" aria-label="Search" label navInput waves waves-fixed/>
        </form>
      </mdb-navbar-toggler>
    </mdb-navbar>
    <!--/.Navbar-->
  </div>
</template>

<script>
import { mdbNavbar, mdbNavItem, mdbNavbarNav, mdbNavbarToggler, mdbDropdown, mdbDropdownItem, mdbDropdownMenu, mdbDropdownToggle, mdbInput } from 'mdbvue';

export default {
  name: 'NavigationPage',
  components: {
    mdbNavbar,
    mdbNavItem,
    mdbNavbarNav,
    mdbNavbarToggler,
    mdbDropdown,
    mdbDropdownItem,
    mdbDropdownMenu,
    mdbDropdownToggle,
    mdbInput
  },
  mounted() {
    document.getElementById("main-navbar").style.height = '60px';
  },
  beforeDestroy() {
    document.getElementById("main-navbar").style.height = null;
  }
};
</script>

感谢线索!

嗯,我现在在解决方案上取得了一些进步!在我的Vue.js应用程序中,我想获取菜单级别的JSON数据。根据我10月份插件中的帖子(How to get static page dropdown in OctoberCMS with get page tree?),我能够创建一条将数据发送到Vue.js的路由。

但是当我这样做时:

  $theme = \Cms\Classes\Theme::getEditTheme();
  $pageList = new \RainLab\Pages\Classes\PageList($theme);
  $treePageList = $pageList->getPageTree(true);
  return $treePageList;

我得到的结构太多了。如何将其简化为仅包含带有多级菜单的标题和URL的JSON数据?我想获得类似的东西:

  "Sub pages"   "sub-pages"         +
        "Child One"     "child-1"
        "Child Two"     "child-2"
        "Child Three"   "child-3"
        "Child Four"    "child-4"           +
            "Sub Child" "sub-child"
  "Forms"       "forms"     +
        "Form Contact"      "form-contact"
  "test"        "test"

感谢您的帮助!

json vue.js vue-router octobercms
1个回答
0
投票
https://router.vuejs.org/guide/essentials/dynamic-matching.html

请参阅此附件链接。

您需要做的是给您的路由命名:

{ path: '/page/:pageName', name: 'sitePage', component: SitePage },

© www.soinside.com 2019 - 2024. All rights reserved.