• Ввойдите на сайт >>>

Статьи

Общие рецепты

  1. Изменить версию PHP CLI
  2. Создание простой галереи
  3. Решение:
  4. Рендеринг контента в столбцах
  5. Решение:
  6. Действительно простой слайдер изображений CSS
  7. Решение:
  8. Оборачиваем уценку в html
  9. Проблема:
  10. Решение:
  11. Создать приватную зону
  12. Требовать специальные разрешения для просмотра одной или нескольких страниц
  13. Используйте групповые разрешения
  14. Динамически стилизовать одну или несколько страниц
  15. Перенос HTML-темы в Grav
  16. Добавление правильных ссылок на активы
  17. Добавление другой страницы
  18. Общие элементы
  19. Добавить ресурс на определенную страницу
  20. Решение
  21. Повторное использование страницы или модульного контента на другой странице
  22. Решение:
  23. Проблема:
  24. Решение:
  25. Отображение различного содержимого robots.txt для разных сред
  26. Решение:

Эта страница содержит ассортимент проблем и их соответствующих решений, связанных с Grav в целом.

Изменить версию PHP CLI

Иногда на терминале версия PHP отличается от версии PHP, используемой веб-сервером.

Вы можете проверить версию PHP, запущенную в CLI, выполнив команду php -v. Если версия PHP меньше 5.5.9, Grav не будет работать, так как для этого требуется как минимум PHP 5.5.9.

Как исправить?

Вам нужно ввести некоторую конфигурацию в .bashrc или .bash_profile в вашей домашней папке пользователя. Создайте эти файлы, если у вас их еще нет в папке пользователя. Это скрытые файлы, поэтому вам может потребоваться ls -al, чтобы показать их. Как только конфигурация будет добавлена, вам нужно будет начать новый сеанс терминала, чтобы применить эти настройки.

Пример конфигурации может быть:

псевдоним php = "/ usr / local / bin / php53" export PHP_PATH = "/ usr / local / bin / php53"

Альтернативный способ - добавить:

# .bash_profile # Получить псевдонимы и функции if [-f ~ / .bashrc]; затем . ~ / .bashrc fi # Пользовательская среда и программы запуска PATH = / usr / local / lib / php-5.5 / bin: $ PATH: $ HOME / bin export PATH

Точный путь, конечно, зависит от того, как настроена ваша система, где хранятся более свежие двоичные версии PHP. Это может быть то, что вы найдете в документации по хостингу, или вы можете спросить настройки вашего хостинга, если вы нигде не найдете его.

Вы также можете попробовать поискать в php-что-нибудь файлы или папки в папках / usr / local / bin или / usr / local / lib с помощью ls -la / usr / local / lib / | grep -i php.

Создание простой галереи

Проблема:

Распространенным требованием веб-дизайна является создание галереи определенного вида на странице. Это может быть отображение фотографий вашего нового домашнего питомца, портфолио предыдущих дизайнерских работ или даже базовый каталог некоторых продуктов, которые вы хотите показать и продать своим пользователям. В этом примере мы предполагаем, что вы хотите просто отобразить несколько фотографий с подписью ниже. Это, конечно, может быть адаптировано и для других целей.

Решение:

Самый простой способ найти решение этой проблемы - использовать Grav. медиа-функциональность что позволяет странице быть в курсе изображений, доступных в ее папке.

Предположим, у вас есть страница, которую вы назвали gallery.md, а также у вас есть множество изображений в одном каталоге. Сами имена файлов не важны, так как мы будем просто перебирать каждое из изображений. Поскольку мы хотим иметь дополнительные данные, связанные с каждым изображением, мы включим файл meta.yaml для каждого изображения. Например, у нас есть несколько изображений:

- fido-playing.jpg - fido-playing.jpg.meta.yaml - fido-sleep.jpg - fido-sleep.jpg.meta.yaml - fido-eat.jpg - fido-eat.jpg.meta.yaml - fido -growling.jpg - fido-growling.jpg.meta.yaml

Каждый из файлов .jpg имеет относительно хороший размер, который подходит для полноразмерной версии, размером 1280px x 720px. Каждый из файлов meta.yaml содержит несколько ключевых записей, давайте посмотрим на fido-playing.jpg.meta.yaml:

title: Fido Игра со своей костью. Описание: На днях Фидо получил новую кость, и он был действительно очарован ею.

Вы имеете полный контроль над тем, что вы помещаете в эти метафайлы, они могут быть абсолютно любыми.

Теперь нам нужно отобразить эти изображения в обратном хронологическом порядке, чтобы сначала отображались новейшие изображения, а затем отображать их. Поскольку наша страница называется gallery.md, мы должны создать соответствующий templates / gallery.html.twig, содержащий необходимую логику рендеринга:

{% extends 'partials / base.html.twig'%} {% block content%} {{page.content}} <ul> {% для изображения в page.media.images%} <li> <div class = " image -round "> {{image.cropResize (300,200) .html}} </ div> <div class =" image-info "> <h2> {{image.meta.title}} </ h2> <p> {{image.meta.description}} </ p> </ div> </ li> {% endfor%} </ ul> {% endblock%}

Чтобы модульная галерея отображалась на другой странице, удалите следующий код из файла Twig, чтобы он работал:

{% extends 'partials / base.html.twig'%} {% block content%} {{page.content}}

а также

По сути, это расширяет стандартный partials / base.html.twig (при условии, что ваша тема имеет этот файл), затем он определяет блок контента и предоставляет для него контент. Первое, что мы делаем, это выводим любой page.content. Это будет содержимое файла gallery.md, поэтому оно может содержать заголовок и описание этой страницы.

Следующий раздел просто перебирает все медиа страницы, которые являются изображениями . Мы выводим их в неупорядоченном списке, чтобы сделать вывод семантическим и простым в оформлении с помощью CSS. мы присваиваем каждому изображению имя переменной name, а затем мы можем выполнить простой метод cropResize (), чтобы изменить размер изображения до чего-то подходящего, а затем под ним мы предоставляем информационный раздел с заголовком и описанием.

Вы можете сделать более продвинутую реализацию галереи, используя фильтры для данных камеры, с EXIF -функции.

Рендеринг контента в столбцах

Проблема:

Вопрос, который возник несколько раз, заключается в том, как быстро отобразить одну страницу в нескольких столбцах.

Решение:

Существует много потенциальных решений, но одно простое решение - разделить ваш контент на логические разделы, используя разделитель, такой как HTML <hr /> или тег тематического разрыва . В уценке это представлено 3 или более тире или ---. Мы просто создаем наш контент и разделяем наши разделы контента с помощью следующих штрихов:

columns.md

--- название: 'Тестирование столбцов' --- Lorem ipsum dolor sit amet, consitteur adipiscing elit. Меценаты arcu leo, hendrerit ut rhoncus eu, dictum vitae ligula. Suspendisse interdum в purus eget congue. Аликвам Эрат Волутпат. Proin ultrices ligula vitae nisi congue sagittis. Nulla mollis, libero id maximus elementum, ante dolor auctor sem, sed volutpat mauris nisl non quam. --- Phasellus id eleifend risus. В Dui Tellus, Dignissim ID Viverra Non, Convallis Sed Ante. Suspendisse dignissim, felis vitae faucibus dictum, dui mi tempor lectus, non porta elit libero quis orci. Morbi porta neque quis magna imperdiet hendrerit. --- Прейсент элефенд коммодо пуру, сиди амет виверра нун диктум нек. Mauris vehicleula, purus sed convallis blandit, mass sem egestas ex, congue odio lacus non quam. Donec vitae metus vitae enim imperdiet tempus vitae сидеть амет квам. Nam sed aliquam justo, в semper eros. Suspendisse magna turpis, mollis quis dictum sit amet, luctus id tellus. Vestibulum ante ipsum primis у faucibus orci luctus et ultrices posuere cubilia Curae; Aenean eu rutrum mi.

Примечание: дополнительная строка после столбца и перед ---. Это потому, что если вы поместите тройную черту прямо под текстом, это фактически интерпретируется как заголовок.

Затем нам просто нужно визуализировать этот контент с помощью шаблона columns.html.twig (так как файл страницы назывался columns.md):

{% extends 'partials / base.html.twig'%} {% block content%} <таблица> <tr> {% для столбца в page.content | split ('<hr />')%} <td> { {column}} </ td> {% endfor%} </ tr> </ table> {% endblock%}

Вы можете увидеть, как содержимое разделяется тегом <hr /> и преобразуется в массив из 3 столбцов, которые мы зацикливаем и визуализируем. В этом примере мы используем простой тег таблицы HTML, но вы можете использовать все, что пожелаете.

Действительно простой слайдер изображений CSS

Проблема:

Вам нужен слайдер изображений без каких-либо накладных расходов.

Решение:

Этот рецепт для 4 изображений и страницы с названием slider.md! Просто поместите изображения туда, где находится файл .md. Затем создайте новый шаблон Twig и расширьте base.html.twig.

{% extends 'partials / base.html.twig'%} {% block content%} <div id = "slider"> <figure> {% для изображения в page.media.images%} {{image.html}} {% endfor%} </ figure> </ div> {{page.content}} {% endblock%}

Для модульного слайдера, пожалуйста, удалите

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

а также

из предыдущего файла Twig.

Время для CSS. Добавьте это к вашему _custom.scss

@keyframes slidy {0% {left: 0%; } 20% {осталось: 0%; } 25% {осталось: -100%; } 45% {осталось: -100%; } 50% {осталось: -200%; } 70% {осталось: -200%; } 75% {осталось: -300%; } 95% {осталось: -300%; } 100% {осталось: -400%; }} body {margin: 0; } div # slider {overflow: hidden; на полях: -3рем; максимальная высота: 30рем; } div # slider figure img {width: 20%; плыть налево; } div # слайдер фигура {позиция: относительная; ширина: 500%; поле: 0; слева: 0; анимация: слайд 30-х бесконечно; }

Это все.

Оборачиваем уценку в html

На некоторых страницах вы можете захотеть обернуть части содержимого уценки в некоторый пользовательский HTML-код вместо создания нового шаблона Twig.

Для достижения этого вы выполните следующие действия:

В файле конфигурации вашей системы user / config / system.yaml обязательно активируйте опцию markdown extra:

страницы: уценка: дополнительная: правда

в теге-обертке обязательно добавьте параметр markdown = "1", чтобы активировать обработку содержимого уценки:

<div class = "myWrapper" markdown = "1"> # мое содержание уценки это содержимое упаковано в div с классом "myWrapper" </ div>

сделанный.

Проблема:

Вы хотите создать виджет последних сообщений на боковой панели

Решение:

Всегда можно создать частичный шаблон, расширяющий partials / base.html.twig (см. Другие решения на этой странице), но здесь вы собираетесь создать полный шаблон. Окончательный код вашего шаблона Twig показан ниже:

<div class = "sidebar-content Recent-Posts"> <h3> Последние сообщения </ h3> {% для p в page.find ('/ blog'). children.order ('date', 'desc'). slice (0, 5)%} {% set bannerimage = p.media ['banner.jpg']%} <div class = "недавний пост"> {% if bannerimage%} <div class = "недавний пост- image "> {{bannerimage.cropZoom (60,60) .quality (60)}} </ div> {% else%} <div class =" Recent-post-image "> <img src =" {{url ( 'theme: //images/logo.png')}} "width =" 60 "height =" 60 "> </ div> {% endif%} <div class =" недавний пост-текст "> <h4> <a href=" average карпедментатур.url‹‹"> {{p.title}} </a> </ h4> <p> {{p.date | date ("M j, Y")}}} / p> </ div> </ div> {% endfor%} </ div>

Все, что делает этот код, сортирует дочерние элементы (сообщения в блоге) страницы / blog по убыванию даты. Затем он берет первые пять сообщений в блоге, используя фильтр Twig среза. Кстати, slice (n, m) принимает элементы от n до m-1. В этом примере любые посты в блоге с изображением баннера были названы banner.jpg. Это установлено в переменной bannerimage. Если bannerimage существует, оно сокращается до размера 60px x 60px и будет отображаться слева от текста заголовка и даты публикации. Если он не существует, логотип веб-сайта изменяется до 60px x 60px и размещается слева от текста заголовка и даты.

CSS для этого виджета указан ниже:

.sidebar-content .recent-post {margin-bottom: 25px; отступ - 25 пикселей; нижняя граница: 1px solid # F0F0F0; плыть налево; ясно: оба; ширина: 100%; } .sidebar-content [class ~ = 'Recent-post']: последний из типа {border-bottom: none; } .sidebar-content .recent-post .recent-post-image, .sidebar-content .recent-post .recent-post-text {float: left; } .sidebar-content .recent-post .recent-post-image {margin-right: 10px; } .sidebar-content .recent-post .recent-post-text h4 {font-family: serif; нижнее поле: 10 пикселей; } .sidebar-content .recent-post .recent-post-text h4 a {color: # 193441; } .sidebar-content .recent-post .recent-post-text p {font-family: Arial, sans-serif; размер шрифта: 1,5 мм; цвет: # 737373; поле: 0; }

Настройте интервал между последними записями, шрифтом, размером шрифта и весом шрифта по вкусу.

Создать приватную зону

Grav позволяет очень легко создать личную зону на сайте. Все работает благодаря плагину входа.

Если у вас его еще нет, установите его через панель администратора или с помощью утилиты командной строки GPM.

Далее откройте страницу в Admin, переключитесь в экспертный режим и в разделе FrontMatter добавьте

Пользователи, получающие доступ к странице, должны будут войти в систему, чтобы увидеть содержимое страницы.

Обратите внимание, что по умолчанию разрешение не распространяется на подстраницы. Для этого в настройках плагина Login включите «Использовать родительские правила доступа».

Эта опция позволяет вам создавать расширенные приватные области, не беспокоясь об уровне доступа. Просто поместите все под страницу, которая имеет ограничение на доступ.

Требовать специальные разрешения для просмотра одной или нескольких страниц

Аналогично описанному выше процессу, вы можете назначить любое разрешение на странице. Вы даже можете придумать свои собственные имена разрешений.

Например:

доступ: site.onlybob: правда

Затем добавьте разрешение site.onlybob Бобу в его пользовательский файл bob.yaml в папке user / accounts:

доступ: site.onlybob: правда

Используйте групповые разрешения

Вы также можете назначать пользователей группе и назначать разрешения группе, а не отдельным пользователям. Пользователи будут наследовать разрешения группы.

Добавьте файл user / config / groups.yaml, например, с таким содержимым:

зарегистрирован: readableName: «Зарегистрированные пользователи» описание: «Группа зарегистрированных пользователей» доступ: сайт: логин: правда премиум: readableName: «Премиум участники» описание: «Группа премиум пользователей» доступ: сайт: логин: правда платно: правда

Теперь назначьте пользователей в группу, добавив

в их пользовательский файл yaml, под user / account

Теперь пользователям, входящим в премиум-группу, будет разрешен доступ к страницам с разрешением site.paid.

Во многих случаях вы бы хотели, чтобы «какой-то» javascript был добавлен в нижний колонтитул, а не в заголовок страницы, чтобы он загружался после визуализации содержимого.

Хорошим примером этого является проверка темы Antimatter.

Шаблоны Antimatter / partials / base.html.twig определяют нижний блок для js, вызывая {{assets.js ('bottom')}}

{% block bottom%} {{assets.js ('bottom')}} {% endblock%}

Вы можете добавить активы в этот блок в Twig, например, вызвав

{% do assets.addJs ('theme: //js/slidebars.min.js', {group: 'bottom'})%}

или в PHP, позвонив

$ this-> grav ['assets'] -> addJs ($ this-> grav ['base_url']. '/user/plugins/yourplugin/js/somefile.js', ['group' => 'bottom'] );

Местоположение по умолчанию для вывода журналов Grav просто называется logs /. К сожалению, в некоторых случаях эта папка / папка уже используется или недоступна. Гибкая система потоков Grav позволяет настраивать расположение этих папок.

Во-первых, вам нужно создать новую папку. В этом примере мы создадим новую папку в корне вашей установки Grav под названием grav-logs /. Затем создайте новый файл корневого уровня с именем setup.php и вставьте следующий код:

<? php use Grav \ Common \ Utils; return ['streams' => ['themes' => ['log' => ['type' => 'ReadOnlyStream', 'prefixes' => ['' => ["grav-logs"],]]] ]];

Это в основном переопределяет поток журналов с папкой grav-logs /, а не папкой logs / по умолчанию, как определено в system / src / Grav / Common / Config / Setup.php.

Для создания вертикального, разборного, иерархического меню страниц вам понадобится цикл Twig, немного CSS и немного JavaScript. Окончательный результат при использовании темы Antimatter будет выглядеть следующим образом:

Давайте начнем с Twig:

<ol class = "tree"> {% для страницы в pages.children.visible%} {%, если page.children.visible пусто%} <li class = "item"> <a href = "{{page.url }} "> {{page.title}} </a> {% else%} <li class =" parent "> <a href="javascript:void(0);"> {{page.title}} < / a> <ol> {% для потомка в page.children.visible%} {%, если child.children.visible пусто%} <li class = "item"> <a href = "{{child.url}} "> {{child.title}} </a> {% else%} <li class =" parent "> <a href="javascript:void(0);"> {{child.title}} </ a > <ol> {% для дочерних элементов в child.children.visible%} <li> <a href="‹ карманный subchild.url} enj"> {{subchild.title}} </a> </ li> {% endfor%} </ ol> {% endif%} </ li> {% endfor%} </ ol> {% endif%} </ li> {% endfor%} </ ol>

Это создает упорядоченный список, который перебирает все видимые страницы в Grav, углубляясь на три уровня, чтобы создать структуру для каждого уровня. Список, обернутый вокруг всей структуры, имеет дерево классов, и у каждого элемента списка есть родительский класс, если он содержит дочерние элементы или элемент, если это не так.

При щелчке по родительскому элементу открывается список, а обычные элементы ссылаются на саму страницу. Вы можете добавить это практически к любому шаблону Twig в теме Grav, при условии, что Grav может получить доступ к видимым страницам.

Чтобы добавить стиль, добавим немного CSS:

<style> ol.tree li {position: родственник; } ol.tree li ol {display: none; } ol.tree li.open> ol {display: block; } ol.tree li.parent: after {content: '[+]'; } ol.tree li.parent.open:after {content: ''; } </ style>

Как правило, это следует поместить перед структурой Twig или в идеале направить в Менеджер активов в твоей теме. Эффект заключается в добавлении [+] после каждого родительского элемента, указывающего, что он может быть открыт, который исчезает при открытии.

Наконец, давайте добавим немного JavaScript в ручка переключения открытый класс:

<script type = "text / javascript"> var tree = document.querySelectorAll ('ol.tree a: not (: last-child)'); for (var i = 0; i <tree.length; i ++) {tree [i] .addEventListener ('click', function (e) {var parent = e.target.parentElement; var classList = parent.classList; if ( classList.contains ("open")) {classList.remove ('open'); var opensubs = parent.querySelectorAll (': scope .open'); для (var i = 0; i <opensubs.length; i ++) { opensubs [i] .classList.remove ('open');}} else {classList.add ('open');}}); } </ script>

Это всегда следует размещать после структуры Twig, в идеале также в Менеджер активов ,

Динамически стилизовать одну или несколько страниц

Вы можете динамически стилизовать различные страницы / сообщения на своем сайте Grav (независимо от назначения файла шаблона), настроив файл ветки темы для применения CSS-класса, переданного в качестве переменной в FrontMatter страницы.

Вы можете стилизовать разные посты / страницы на своем сайте Grav двумя способами:

  1. Если вы используете тему Antimatter, вы можете использовать существующее свойство заголовка body_classes, чтобы установить свой собственный класс CSS для этой страницы.
  2. Если вы используете тему, не основанную на Antimatter (или не реализует body_classes, как она делает), вы можете настроить файл Twig темы, чтобы применить класс CSS, переданный в качестве переменной в свойстве заголовка страницы.

Например, в файле base.html.twig вашей темы или в более конкретном шаблоне, таком как файл page.html.twig, вы можете добавить класс для отображения содержимого страницы, например:

<div class = "{{page.header.body_classes}}"> ... </ div>

Затем для каждой страницы, для которой вы хотите иметь уникальный стиль, вы должны добавить следующее свойство заголовка (при условии, что вы определили класс CSS для featurepost):

body_classes: featurepost

Примечание. Именно так тема Antimatter применяет классы, специфичные для страниц, и поэтому ей следует следовать.

Перенос HTML-темы в Grav

Перенос HTML-темы в Grav - обычная задача. Вот практический пошаговый процесс, который можно использовать для достижения этой цели.

Вы, вероятно, скачали тему, и она состоит из нескольких файлов HTML. Давайте начнем с того, что заставим Grav загрузить домашнюю страницу. Никакого пользовательского содержимого, просто скопируйте тему HTML, но в рамках структуры Grav.

Первый, используйте плагин Grav Devtools создать пустую тему и установить Grav, чтобы использовать ее в настройках системы.

Создайте шаблон Twig templates / home.html.twig в папке шаблонов темы. Это будет представлять шаблон, специфичный для домашней страницы. Обычно домашняя страница является уникальной страницей на сайте, поэтому она, вероятно, заслуживает отдельного файла Twig.

Скопируйте код HTML с домашней страницы шаблона, начиная с <html> и заканчивая </ html>, в свой новый файл home.html.twig.

Теперь переместите все ресурсы темы HTML (изображения, CSS, JS) в папку вашей темы. Вы можете сохранить существующую структуру папок темы или изменить ее.

Создайте пустой файл pages / 01.home / home.md. Теперь укажите вашему браузеру yoursite.com/home: он должен отображать контент, но CSS, JS и изображения не будут загружены, вероятно, потому что тема имеет их жестко закодированные как ссылки / img / * или / css / *.

Добавление правильных ссылок на активы

В Grav ссылки не работают, потому что они указывают на домашний маршрут, поэтому вместо указания на / user / themes / mytheme / img они указывают на / img в корне Grav. Поскольку все ресурсы, относящиеся к теме, лучше хранить внутри темы, нам нужно указать Grav в правильном месте.

Найдите на странице ресурсы и измените ссылки на изображения с img /*.* на <img src = "{{url ('theme: //img/*.*', true)}}" />.

Таблицы стилей требуют немного больше обдумывания, поскольку в какой-то момент мы хотим включить конвейер ресурсов, поэтому мы перемещаем их в блок таблиц стилей внутри тега <head>.

Пример:

{% block stylesheets%} {% do assets.addCss ('theme: //css/styles.min.css', 100)%} {% endblock%} {{assets.css ()}}

То же самое относится и к файлам JavaScript, с дополнительным требованием, чтобы некоторые JS загружались в нижний колонтитул.

Пример:

{% block javascripts%} {% do assets.addJs ('theme: //js/custom.js')%} {% do assets.addJs ('jquery', 101)%} {% endblock%} {{assets .js ()}}

Изменения страницы теперь должны отображаться в вашем браузере. Если нет, убедитесь, что кеш страниц и веточка отключены в настройках конфигурации системы Grav.

Это только начало. Теперь вам может понадобиться добавить больше страниц и придумать лучшие способы представления содержимого ваших страниц с помощью заголовка FrontMatter и пользовательского Twig, который обрабатывает обычные стандартные блоки: отзывы на главной странице, обзоры, функции продукта и т. Д. ,

Добавление другой страницы

Чтобы добавить другую страницу, процесс аналогичен. Например, допустим, вы хотите в следующий раз создать страницу блога. Повторите процесс, чтобы добавить файл templates / blog.html.twig, вставить источник HTML и создать страницу pages / 02.blog / blog.md.

Теперь, хотя ссылки на изображения внутри страниц по-прежнему необходимо перенести в синтаксис ресурсов Grav (или просто изменить путь), вам не нужно повторять ту же работу, которую вы проделали выше для ресурсов CSS и JS. Это должно быть повторно использовано по всему сайту.

Общие элементы

Определите общие части страниц (верхний и нижний колонтитулы) и переместите их в файл templates / partials / base.html.twig.

Затем каждый шаблон страницы должен расширять partials / base.html.twig (https://github.com/getgrav/grav-theme-antimatter/blob/develop/templates/default.html.twig#L1) и просто добавлять свои уникальные содержание.

Добавить ресурс на определенную страницу

проблема

Вам нужно добавить ресурс к определенному шаблону в вашей теме.

Решение

В большинстве случаев ваши активы будут добавляться в блок веточек в базовом шаблоне, как показано ниже.

{% block javascripts%} {% do assets.addJs ('theme: //js/jquery.js', 91)%} {% endblock%} {{assets.js ()}}

Чтобы добавить свой актив, вы должны расширить этот блок в своем шаблоне и вызвать {{parent ()}}, чтобы получить активы, уже добавленные в ваш базовый шаблон. Допустим, вы хотите добавить файл «gallery.js» на страницу «Галерея портфолио». Отредактируйте шаблон и добавьте свой ресурс с помощью {{parent ()}}.

{% block javascripts%} {% do assets.addJs ('theme: //js/gallery.js', 100)%} {{parent ()}} {% endblock%}

Повторное использование страницы или модульного контента на другой странице

Проблема:

У вас есть много страниц или модулей, и вы хотите совместно использовать один и тот же блок контента на нескольких страницах без необходимости поддерживать несколько отдельных экземпляров одного и того же текста.

Решение:

Это очень простой простой метод, который не требует плагина и может быть использован в панели администратора.

Примечание: есть также плагин Плагин Grav Page Inject для этой функциональности, которая может подойти для более сложных сценариев.

Во-первых, создайте новый файл шаблона, который будет выполнять роль заполнителя для контента - он может иметь любое имя, это называется «модульное повторное использование» и будет храниться в папке шаблонов / модульной области вашей темы для этого примера, но его можно сохранить. в любом месте в папке шаблонов.

modular_reuse.html.twig содержит только одну строку:

Затем создайте новую модульную страницу в панели администратора, где этот контент должен отображаться с помощью этого нового шаблона «модульного повторного использования». Имя новой страницы может быть любым, поскольку оно не будет отображаться - будет выведено исходное название страницы.

Содержание страницы всего одна строка: Страница:

{% include 'modular_reuse.html.twig' с {'page': page.find ('/ test-page / amazing-offer')}%}

Модульный:

{% include 'modular / modular_reuse.html.twig' с {'page': page.find ('/ test-page / _amazing-offer')}%}

После «include» находится шаблон первого шага, вероятно, в папке шаблонов для страниц в папке templates / modular для модульных модулей.

После page.find должна появиться фактическая ссылка на оригинальный контент, который вы хотите использовать повторно. Модульный контент начинается с _, а страницы - нет. Самый простой способ найти правильную ссылку - открыть страницу в панели администратора и скопировать URL после слова admin.

Последняя страница должна выглядеть так:

--- title: 'Пример модульного повторного использования' --- {% include 'modular / modular_reuse.html.twig' с {'page': page.find ('/ test-page / _amazing-offer')}%}

Теперь «удивительные предложения» могут отображаться в нескольких местах, но их нужно обновлять только один раз.

Проблема:

Обычные методы предотвращения спама, такие как honeypot-field, обходятся некоторыми спам-ботами.

Решение:

Сделайте так, чтобы боту было сложнее угадать, что он может и не может заполнить, при заполнении контактной формы. Проще говоря, задайте вопрос, на который пользователь не преминет ответить, но чьи ответы трудно понять боту. В вашем Markdown-файле с Форма-данных , добавьте это поле:

- имя: тип личности: радио лейбл: что пять раз восемь? Варианты: Аляска: 32 Оклахома: 40 Калифорния: 48 проверить: требуется: true шаблон: «^ oklahoma $» сообщение: Не совсем, попробуйте эту математику еще раз.

Вопрос должен быть чем-то простым, но с несколькими простыми неправильными ответами, сопровождающими его. Важен порядок ответов. Правильный ответ никогда не должен быть первым; цель где-то посередине. Важно рандомизировать значения за ответами (метками) самостоятельно, поэтому база данных связанных значений и ответов не поможет в ответе.

Боты становятся умнее все время, но они склонны отказываться от попыток ответить на один и тот же вопрос несколько раз, если первая попытка не удалась. Кроме того, даже самые умные из них полагаются на словари известных данных, чтобы угадать ответ. Мы задаем простой вопрос «Что пять раз восемь?» И даем три варианта: «32», «40» и «48». Правильный ответ, очевидно, «40», но вместо того, чтобы проверять математические навыки бота, мы присваиваем значениям «Аляска», «Оклахома» и «Калифорния» соответственно. Поскольку боты смотрят на возможные значения, а не на их метки, ответы не имеют никакого отношения к вопросу. Вы даже можете добавить ответ «Ананас» со значением «Миссисипи» и проверить его, а также просто попросить своих пользователей выбрать этот ответ. Дело в том, чтобы персонализировать рандомизацию данных.

Отображение различного содержимого robots.txt для разных сред

Проблема:

Вы настроили поддомен dev.yourdomain.com в качестве сайта разработки для предварительного просмотра того, над чем работаете, до публикации изменений на yourdomain.com, и хотите запретить поисковым индексаторам сканировать его, при этом оставляя производственный сайт видимым в поиске. Результаты.

Решение:

Несмотря на то, что вы должны защищать свой сайт разработкой паролем, чтобы он действительно был закрытым, иногда достаточно и просто более практично просто запретить индексаторам поисковых систем сканировать ваш сайт. К счастью, Grav может обрабатывать страницы в формате txt так же, как это делает html, поэтому мы можем использовать конфигурации среды и шаблоны веток, чтобы закончить работу.

Сначала давайте создадим файл конфигурации site.yaml, который сообщит нашему шаблону, что dev.yourdomain.com является средой разработки.

/user/[dev.yourdomain.com]/config/site.yaml:

среда: dev

Затем создайте шаблон страницы robots.txt.twig, который проверяет, работает ли Grav в настоящее время на нашем сайте разработки, и отображает другое содержимое, если оно есть.

/user/themes/[yourtheme]/templates/robots.txt.twig:

{% if config.site.environment == 'dev'%} {% для правила в page.header.dev%} {{rule}} {% endfor%} {% else%} {{page.content}} { % endif%}

Наконец, создайте страницу, перенаправленную в /robots.txt с правилами по умолчанию robots.txt в содержимом страницы и нашими альтернативными правилами для версий разработки в frontmatter страницы. Чтобы отобразить содержимое страницы в виде необработанного текста вместо HTML, мы также отключим рендеринг уценки.

/user/pages/robots/robots.md:

--- маршруты: по умолчанию: /robots.txt процесс: разметка: ложь dev: - 'User-agent: *' - 'Disallow: /' --- User-agent: * Disallow: / backup / Disallow: / bin / Disallow: / cache / Disallow: / grav / Disallow: / logs / Disallow: / system / Disallow: / vendor / Disallow: / user / Allow: / user / pages / Allow: / user / themes / Allow: / user / images / Разрешить: /user/plugins/*.css$ Разрешить: /user/plugins/*.js$

Теперь у вас должен быть файл robots.txt, размещенный в корне вашего сайта с динамическим содержимым, также редактируемый с помощью плагина Admin.

Примечание: убедитесь, что ваш производственный сайт не будет отображать Disallow: /, так как это полностью уничтожит видимость вашей поисковой системы.

Похожие

Создавайте мобильные интерактивные карты
листовка это легкая библиотека JavaScript для создания интерактивных карт в Интернете. Это альтернатива Google Maps с открытым исходным кодом, и из-за своего небольшого размера она отлично подходит для мобильных приложений. Листовка позволяет нам добавлять маркеры и другие
ProShow StylePacks Добавить штрих в слайд-шоу
Если вы используете Photodex ProShow Gold или ProShow Producer для создания презентаций и слайд-шоу, добавьте ProShow StylePack Том 1 Плагин ($ 20, только для покупки) предоставит вам еще больше творческих возможностей.
Википедия для редизайна более 32 миллионов страниц
... верг Википедия запустит редизайн, почти невероятно большой по размеру, с масштабированием 32 533 899 страниц на 287 языках. Но по общему признанию, потребуется острое внимание, чтобы заметить, что размер шрифта больше, или что заголовки разделов будут отображаться в официальном, старом медиа-засечке (например, Грузия), в то время как основная копия будет отображаться в упрощенном без засечек (думаю, Helvetica). «Изменения могут показаться неуловимыми - некоторые читатели Википедии могут
Камеры или лазеры?
... или рядом с ней, например, другие транспортные средства, пешеходов, мусор и в некоторых случаях дорожные объекты, такие как знаки и разметка полос движения. (Датчиками также управляет система локализации, задача которой очень точно определить, где находится автомобиль на дороге.) Система восприятия должна выявлять все препятствия и пытаться их идентифицировать. Нужно измерить их скорость и направление и предсказать, куда они идут. Это очень сложная проблема. Два
Facebook Messenger тестирует добавление неизвестных контактов
... накомца. Скорее, появляется поле «Добавить контакт». Если это напечатано, мессенджер защищает контакт без дружбы Facebook. Messenger более четко отделен от Facebook Эта функция, которая станет общедоступной в ближайшие несколько недель (или, возможно, месяцев), еще более четко отделяет приложение Facebook от отдельного Messenger. Последний должен, однако, также лучше профиль против конкурентов чата, таких как Snapchat или WhatsApp. Потому что не
Как быстро добавить часы / минуты / секунды к дате и времени в Excel?
Например, у вас есть список дат и времени на листе, и теперь вы хотите добавить те же часы / минуты / секунды к тем ячейкам, которые смешаны с датой и временем. Вы можете использовать формулы для решения этой задачи, но здесь я могу рассказать вам еще один прием для быстрого достижения этой цели в Excel. Использование формул для добавления часов / минут / секунд к дате и времени В Excel обычно можно использовать формулы для добавления часов, минут или секунд
Понимание Grid-системы Bootstrap
Эта статья была обновлена ​​для работы с Bootstrap v.4.2. Bootstrap - это фреймворк для создания сайта. Это исключает необходимость создания базы для сайта. Вместо этого вы можете загрузить файлы Bootstrap на свой сервер, а затем добавить шаблон Bootstrap. Есть инструкции о том, как это сделать в нашем Настройка Bootstrap статья. Это даст вам базовый сайт. Тем не менее, что действительно
inftechall - Информационные технологии
... вы попытаетесь установить Windows с USB-накопителя, внешнего накопителя, USB-накопителя, USB-накопителя и т. Д., Вы можете получить следующую ошибку: программе установки не удалось создать новый системный раздел или найти существующий системный раздел. 1. Причины этой ошибки 2. Решение 2.1 Извлеките и снова вставьте USB 2.2 Как вручную создать загрузочный раздел
Положение страницы в Google и ее постоянный мониторинг
... илизация для улучшения операций, уверенность в высокой прибыли. К счастью, для нас, как получателей, отрасли, в которых мы имеем дело с монополией, встречаются редко, поэтому стоит искать альтернативы практически во всех областях. Только таким образом компании, стремящиеся стать монополистами, чувствуют себя обязанными предоставлять своим потенциальным клиентам еще более качественные услуги. Кроме того, часто случается, что неизвестная альтернатива оказывается более эффективной и полезной.
Демо Magento Магазин для расширения предложения: Cart2Quote
... нас Вместе мы Cart2Quote и кучка преданных профессионалов Magento. Мы обладаем более чем десятилетним опытом в области электронной коммерции в области консалтинга, управления проектами, кодирования и веб-дизайна. Мы работали более 200 интернет-компаний и специализируемся на расширениях для интернет-магазинов Magento B2B. Каждое расширение или настройки, которые мы разрабатываем, построены экономически
Оголошення мови в HTML
Оголошення мови в HTML Завжди використовуйте мовний атрибут тега html для оголошення мови за замовчуванням на сторінці. Якщо сторінка містить контент на іншій мові, додавайте мовної атрибут до елементів, що оточують цей контент. Використовуйте lang атрибут для HTML сторінок і xml: lang атрибут для сторінок XML. Для XHTML 1.x та документів HTML5 Polyglot використовуйте обидва атрибути разом. Використовуйте мовні теги з

Комментарии

У кого-нибудь из ваших соседей по квартире или соседей по дому тоже есть кошки?
У кого-нибудь из ваших соседей по квартире или соседей по дому тоже есть кошки? Если это так, то очень удобно объединяться и обмениваться информацией, чтобы вы могли кормить и помогать ухаживать за котятами друг друга, когда вас нет рядом. (Владельцы кошек тоже очень, очень крутые. Это неоспоримый факт, вам не нужно его искать.) Ни одному из вас не придется изо всех сил пытаться войти, поскольку вы уже живете в том же месте. (Городская жизнь так хороша.) Живущий в Лос-Анджелесе
Что вы делаете, если ваш радар показывает, что перед вами есть машина, а камера - нет, или наоборот?
Что вы делаете, если ваш радар показывает, что перед вами есть машина, а камера - нет, или наоборот? Вы должны решить, во что верить. Если вы считаете, что ошиблись, вы можете сделать ошибку. Если вы верите в сообщение о препятствии, вы можете уменьшить свою слепоту (что очень важно), но теперь вы складываете призрачные препятствия обоих датчиков. Иногда вы получаете лучшее из обоих миров, а иногда и худшее. Несмотря на это, поскольку все датчики имеют различные ограничения, хорошее
Теперь, если хотите, продолжайте читать страницу, но разве это не будет намного удобнее, если вы просто добавите нас в белый список?
Теперь, если хотите, продолжайте читать страницу, но разве это не будет намного удобнее, если вы просто добавите нас в белый список? :) Жанр: Гонки Год выпуска: 1999 Разработчик: LucasArts Издатель: ЛукасАртс Возрастной рейтинг: каждый Состояние играбельности: играбельно (со значительными проблемами) Проверено на: Windows 7 x64, Windows 8 x64
Что мы делаем, когда нам нужно изменить объект?
Что мы делаем, когда нам нужно изменить объект? Одним из популярных решений является использование Копирование при записи (COW) , По принципу COW у нас есть указатель на объект (ссылка, дескриптор), мы клонируем объект, на который он указывает, мы меняем значение указателя, чтобы теперь он указывал на клонированный объект, и продолжаем наш алгоритм мутирования. Все остальные ссылки все те же. JavaScript выполняет все «неизменяемые
Какие альтернативы позволят вам проверить положение страницы в Google?
Какие альтернативы позволят вам проверить положение страницы в Google?) Положение страницы в поисковой системе Google и другие статистические данные на сайте позволяют отслеживать ее деятельность на постоянной основе. Основываясь на конкретных данных, можно принять решение о дальнейших шагах - продолжить текущие, если они принесут желаемый эффект (обеспечить стабильное положение сайта) или полностью изменить стратегию.
Или, может быть, вы уже используете некоторые решения?
Или, может быть, вы уже используете некоторые решения? Дайте мне знать в комментариях! Автор: Агата Куфель

Мы задаем простой вопрос «Что пять раз восемь?
У кого-нибудь из ваших соседей по квартире или соседей по дому тоже есть кошки?
Что вы делаете, если ваш радар показывает, что перед вами есть машина, а камера - нет, или наоборот?
Теперь, если хотите, продолжайте читать страницу, но разве это не будет намного удобнее, если вы просто добавите нас в белый список?
Что мы делаем, когда нам нужно изменить объект?
Какие альтернативы позволят вам проверить положение страницы в Google?
Или, может быть, вы уже используете некоторые решения?
Или, может быть, вы уже используете некоторые решения?

Новости

how-to-all.com" href="/video/2010989244-balka-v-geografii-eto/" style="font-size:9pt;align:left;"> Значение «балка»: "Словарь Ушакова", "Архитектурный словарь", "Словарь забытых и трудных слов ХVIII-ХIХ веков" и другие словари русского языка онлайн > how-to-all.com
Лексическое значение: определение Общий запас лексики (от греч. Lexikos) — это комплекс всех основных смысловых единиц одного языка. Лексическое значение слова раскрывает общепринятое представление о предмете,

Советские книги__ скачать
Объединить и скачать + 5 интубаций в головной!18+. Классификационные диффузии * немыкин. полчаса. Нездоровье воронежской области (с аморальных времён до.  абчук в а уж термометр дряхлеть читать мифы

how-to-all.com" href="/video/2010989245-amplituda-eto-v-geografii/" style="font-size:9pt;align:left;"> Значение «амплитуда»: "Словарь Ушакова", "Начала Современного Естествознания. Тезаурус", "Словарь лингвистических терминов" и другие словари русского языка онлайн > how-to-all.com
Лексическое значение: определение Общий запас лексики (от греч. Lexikos) — это комплекс всех основных смысловых единиц одного языка. Лексическое значение слова раскрывает общепринятое представление о предмете,

В какой профессии нужна география
Как это здорово и правильно, Что среди множества наук Мы изучаем географию, Чтоб стал понятен мир вокруг! География – это наука, изучающая функционирование и преобразование географической оболочки

4. МАТЕМАТИКА, АСТРОНОМИЯ, ГЕОГРАФИЯ И ДЕЯТЕЛЬНОСТЬ АЛЕКСАНДРИЙСКИХ УЧЕНЫХ
4. МАТЕМАТИКА, АСТРОНОМИЯ, ГЕОГРАФИЯ И ДЕЯТЕЛЬНОСТЬ АЛЕКСАНДРИЙСКИХ УЧЕНЫХ Уровень знаний о природе вбирал в себя результаты предшествующего развития натурфилософии в классический и эллинистический

Реферат: Городская агломерация сочинение, изложение, работа, доклад, проект по предмету География
Агломерация существует уже сейчас. Строго говоря, агломерация - скопление населенных пунктов, главным образом городских, объединенных интенсивными производственными, хозяйственными и культурными связями.

Константинова Т. | 6-й класс. Тема "Температура воздуха"
Методическое пособие для учителя 6 класс Т.В. КОНСТАНТИНОВА канд. пед. наук, старший преподаватель Калужского государственного педагогического университета им. К.Э. Циолковского

Аэрофлот
Авиакомпания “Аэрофлот” базируется в московском аэропорту Шереметьево и сегодня является лидером рынка пассажирских перевозок в России. За 2015 год Аэрофлот обслужил 26,1 млн пассажиров, став первой авиакомпанией

Австралия
Слайд №2 Австралия — государство в Южном полушарии, расположенное на материке Австралия, острове Тасмания и нескольких других островах Индийского, Тихого и Южного океанов. Единственная страна-материк.

Реферат: Великобритания - Xreferat.com - Банк рефератов, сочинений, докладов, курсовых и дипломных работ
Содержание Вступление ---------------------------------------------3 стр. Карта ---------------------------------------------------- 4 стр. Визитная карточка ------------------------------------5

Карта