我正在使用 GRAV CMS 迈出第一步,并与 twig 取得联系(以及我的第一步)。
对于我的模板,我想扫描一个文件夹并回显其中的每个文件。通常我会使用普通的 PHP 和 scandir 和 foreach,但似乎我不能在我的 base-twig 文件中使用常用的 PHP 函数。是否有可能使用 scandir 或其他任何东西来扫描带有树枝的文件夹?
您可以像往常一样在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>
我遇到了同样的问题,偶然发现了你的问题。
经过一番研究,我发现 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 对象,因此您可以轻松访问它们的path
、file names
等。