Grav多站点设置-如何实现内部包含更多子目录的子目录?

时间:2019-04-27 10:40:23

标签: php content-management-system grav

我是Grav的新来者,一直陷在一个我在其他地方找不到任何解决方案的问题上。希望你们中的一些人能够提供帮助。目前,我正在尝试以一种可以拥有多个子文件夹的方式自定义Grav,这些子文件夹反过来会在子站点中包含更多文件夹。 我的文件夹结构如下:

  • 用户
    • 网站
      • v1
        • 网站
          • subsitefolder1
            • 页(文件夹)
              • 其中包含实际页面的文件夹
          • subsitefolder2
      • v2
        • 网站
          • 子站点文件夹
  • ...

我使用Grav官方指南进行多站点设置,并在Grav的根目录中创建了setup.php(用于子目录)。但不幸的是,这仅适用于v1文件夹级别的站点。 按照我上面的结构要求,位于更深层次的文件夹中的网站无法正常工作。

因此,我尝试自定义setup.php,以便它正确生成新路径。 我以为我已将路径与文件夹结构进行了匹配,但是网站仅显示到subsitefolder1级别。 因此v1/subsitefolder1可以正常工作,因为它显示了登录页面,但是甚至登录页面v1/subsitefolder1/landingpage的实际URL也不再起作用。

我试图更改路径变量以包括新添加的文件夹级别,看起来应该可以使用,因为生成的Url以与旧setup.php相同的方式(与其他文件夹级别相同)匹配了文件夹结构。但这没有用。这是我自定义的setup.php当前的样子:

<?php 
/**
* Multisite setup for sub-directories or path based
* URLs for subsites.
*
* DO NOT EDIT UNLESS YOU KNOW WHAT YOU ARE DOING!
*/
use Grav\Common\Filesystem\Folder;

// Get relative path from Grav root.
$path = isset($_SERVER['PATH_INFO'])
? $_SERVER['PATH_INFO']
: Folder::getRelativePath($_SERVER['REQUEST_URI'], ROOT_DIR);

// Extract name of subsite from path
$name = Folder::shift($path);

$prefix = "/{$name}";


//add another layer for deeper subsites
$subsites= $name . '/' . $path . '/';

//concatenates $name sites and $path"
$urlwithsite=$name . '/' . 'sites/' . $path . '/';

// overwrite folder to contain whole path after user/
$folder = "sites/{$urlwithsite}";


if (!$name || !is_dir(ROOT_DIR . "user/{$folder}")) {
   return [];
}



// Prefix all pages with the name of the subsite
$container['pages']->base($subsites);

return [
   'environment' => $name,
'streams' => [
       'schemes' => [
          'user' => [
              'type' => 'ReadOnlyStream',
             'prefixes' => [
                 '' => ["user/{$folder}"],
              ]
         ]
   ]
   ]
];

生成的URL看起来应该是正确的,因为它与文件夹结构匹配,但是不能正常工作。

先谢谢了。欢迎任何建议。

0 个答案:

没有答案