Я делаю свои первые шаги с GRAV CMS и просто вступаю в контакт с веткой (также мои первые шаги).
Для моего шаблона я хотел бы отсканировать папку и отобразить каждый файл в ней. Обычно я использовал бы обычный PHP и scandir и foreach, но мне кажется, что я не могу использовать обычные функции PHP в моем файле base-twig.
Есть ли возможность использовать scandir или что-то еще для сканирования папки веткой?
Вы можете как обычно сканировать в php файле, а затем отправлять данные в шаблон веточки
в yourphpfile.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
, так далее.