Web
Analytics
Skip to content
Concrete5 на русском языке

Использование блока Express объекта для вывода данных

Когда вы создали Express объекты и связи между ними, вам нужно как-то вывести эту информацию для публичного доступа на сайте. Давайте возьмем наш пример с Гаванью и Лодками.  У нас есть страницы для каждой гавани, и мы хотели бы показать какие лодки находятся в каждой гавани на этих страницах. 

Здесь показано как мы достигнем этой цели

  1. Во-первых, мы создадим атрибут страницы, который свяжет каждую Гавань с соответствующей ей страницей. 
  2. Потом, мы добавим блок Детали Express объекта на каждую страницу, и настроим на показ express атрибута.
  3. Затем, создадим свой шаблон для этого блока, который будет брать с текущей страницы данные express объекта, находить соответствующие этому объекту лодки и выведет подходящие данные на странице. 

Видео

Если вы хотите посмотреть видео показывающее все шаги, то вот оно:

Атрибут

Сначала, мы создадим  Express Entity атрибут страницы, как на фото:

Создание атрибута страницы

Then, apply the attribute to each page on the front-end:

Блок вывода данных (Подробно)

Добавьте блок вывода данных Express объекта на подходящую страницу с гаванью. Настройте его брать пользовательский атрибут с текущей страницы:

Добавление блока вывода данных Express объекта

Пользовательский Шаблон

Наконец, мы создадим пользовательский шаблон, и применим его к текущему блоку.  Узнайте как создавать пользовательские шаблоны блоков здесь... Вот как выглядит наш пользовательский шаблон:

<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
<?php

if (isset($entry) && is_object($entry)) {

$boats = $entry->getBoats();

?>

<table class="table">
    <thead>
    <tr>
        <th>Name</th>
        <th>Year</th>
        <th>Owner</th>
        <th>Classification</th>
    </tr>
    </thead>
    <tbody>
    <?php if (count($boats)) {
        foreach($boats as $boat) { ?>
            <tr>
                <td><?=$boat->getBoatName()?></td>
                <td><?=$boat->getBoatYear()?></td>
                <td><?=$boat->getBoatOwner()?></td>
                <td><?=$boat->getBoatClass()?></td>
            </tr>
        <?php } ?>
    <?php } else { ?>
        <tr>
            <td colspan="4">No boats found.</td>
        </tr>
    <?php } ?>
    </tbody>
</table>

<?php } ?>

Это должно быть достаточно понятно. У нашего класса Express  нет метода getBoats(), и у express объекта Лодка нет метода getBoatClass(), getBoatYear(), и так далее.... Но у Concrete\Core\Entity\Express\Entryобъекта  есть  магический метод, который определит соответствует ли вызванный метод пользовательскому идентификатору атрибута, или идентификатору связи. Таким образом, у нас будет красивая программа работающая с нашими Express объектами.

Загрузка беседы
Новые статьи
#
Concrete5 это великолепная система управления контентом (CMS), позволяющая создавать сайты как на конструкторе сайтов, но с функциональностью,…
Как вычленить из строки только кириллические буквы и пробелы или только латинские буквы, цифры и пробелы.
При парсинге с помощью плагина SimpleHtmlDom, можно фильтровать по атрибутам, но как сделать фильтрацию по data-src и аналогичным?