2

我正在使用 GRAV CMS 迈出第一步,并与 twig 取得联系(以及我的第一步)。

对于我的模板,我想扫描一个文件夹并回显其中的每个文件。通常我会使用普通的 PHP 和 scandir 和 foreach,但似乎我不能在我的 base-twig 文件中使用常用的 PHP 函数。是否有可能使用 scandir 或其他任何东西来扫描带有树枝的文件夹?

4

2 回答 2

4

您可以像往常一样在php文件中scandir,然后将数据发送到twig模板

在你的phpfile.php

$dir    = '/tmp';
$array_files = scandir($dir);
$template = $twig->loadTemplate('index.html');
echo $template->render(array('files' => $array_files));

在 index.html 中:

<!DOCTYPE html>
    <html>
        <head>
            <title>My Webpage</title>
        </head>
    <body>
        <ul>
            {% for file in files %}
                <li>{{ file }}</li>
            {% endfor %}
        </ul>
    </body>
</html>
于 2015-10-25T20:06:58.000 回答
1

我遇到了同样的问题,偶然发现了你的问题。
经过一番研究,我发现 GRAV 内置了这些功能。或多或少。
我知道已经有一段时间了,但迟到总比没有好:D

第一:添加content到前面的内容
user/pages/pagename/pagename.md

content:
    items: '@root'
    order:
        by: folder
        dir: desc

二:向蓝图添加列表
user/themes/themename/blueprints/pagename.yaml

title: Downloads

'@extends':
    type: default
    context: blueprints://pages

form:
  fields:
    tabs:
      type: tabs
      active: 1

      fields:
        options:
          type: tab
          title: PLUGIN_ADMIN.OPTIONS

          fields:

            filelist:
              type: section
              title: File List
              underline: true

              fields:
                header.folders:
                  name: folders
                  type: list
                  style: vertical
                  label: Folders
                  fields:

                    .folder:
                      type: pages
                      label: Folder
                      show_all: false
                      show_modular: false
                      show_root: false

第三:在模板内循环。
user/themes/themename/templates/pagename.html.twig

{% extends 'partials/base.html.twig' %}

{% block content %}

    {% for current in header.folders %}

        <h3>{{ page.find(current['folder']).title }}</h3>

        {% if page.find(current['folder']).media.files %}
            <h4>Files:</h4>
            {% for pFile in page.find(current['folder']).media.files %}

                {{ pFile.filename }}

                <br/>

            {% endfor %}
        {% endif %}

        {% if page.find(current['folder']).media.images %}
            <h4>Images:</h4>
            {% for pImage in page.find(current['folder']).media.images %}

                {{ pImage.filename }}

                <br/>

            {% endfor %}
        {% endif %}

    {% endfor %}

{% endblock %}

那么它有什么作用呢?

上面的代码允许您选择某些文件夹并列出其中的每个文件和图像。视频和音频被忽略。
如果您安装了管理面板,则可以使用所选模板选择每个页面的选项选项卡内的页面。
由于您拥有常规的 GRAV 对象,因此您可以轻松访问它们的pathfile names等。

于 2017-09-14T10:37:31.693 回答