Изменения в существующем php-коде для шаблонизатора twig

Я хочу прочитать последние темы от Invison Power Board с REST API.

Я нашел работающий код PHP, проверенный на моей системе с PHP 7.3.6, но я не знаю, как использовать этот код в Twig v2.10.0.

function getRecentForumTopics() {
    $communityUrl = 'https://domain.tld/';
    $apiKey = '123';
    $endpoint = '/forums/topics';
    $vars = '?sortDir=desc&perPage=4';

    $curl = curl_init( $communityUrl . 'api' . $endpoint.$vars );
    curl_setopt_array( $curl, array(
        CURLOPT_RETURNTRANSFER  => TRUE,
        CURLOPT_HTTPAUTH    => CURLAUTH_BASIC,
        CURLOPT_USERPWD     => "{$apiKey}:"
    ) );
    $response = curl_exec( $curl );
    $values = json_decode($response, true);
    $data = [];
    foreach($values['results'] as $value) {
        $data[] = [
            'title' => $value['title'],
            'url' => $value['firstPost']['url']
        ];
    }
    return $data;
}
echo '<h2>Recent Topics</h2>';
$array = getRecentForumTopics();
echo '<ol>';
foreach($array as $key => $item) {
    echo '<li><a href = "'.$item['url'].'" target = "_blank">'.$item['title'].'</a></li>';
    if ($key == 4) {
        break;
    }
}
echo '</ol>';

Это существующий PHP-код в Twig.


<?php
session_start();
require_once 'vendor/autoload.php';
require_once 'libs/user.php';
require_once 'config.php';

$data = array(
  "WebTitle" => "name",
  //"User" => User::GetData($_SESSION['user_id'])
);

$loader = new Twig_Loader_Filesystem('templates/');
$twig = new Twig_Environment($loader, array(
    'cache' => 'c_cache',
    'debug' => 'false'
));

echo $twig->render('test.html', $data);

Что мне нужно изменить, чтобы этот код работал в Twig?

что ты уже испробовал? Вы получаете какие-либо ошибки?

Chase 23.06.2019 22:21

Я могу добавить php-код в php-код twig, тогда последние темы будут показаны в конце страницы. Ошибок нет, но я не знаю, как это написать в twig.

d0m1 24.06.2019 16:35

Итак, что внутри test.html

DarkBee 25.06.2019 09:02

{{ include('includes/head.html') }} <body> {{ include('includes/nav.html') }} <section class = "container mt-3"> <div class = "row"> </div> </section> {{ include('includes/footer.html') }} </body> </html>

d0m1 25.06.2019 19:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
595
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Twig — это язык шаблонов, поэтому ваш HTML-код входит в ваши шаблоны. Как и ваш test.html. Затем в PHP вы получаете все данные, необходимые вашему шаблону, и передаете их.

<?php
session_start();
require_once 'vendor/autoload.php';
require_once 'libs/user.php';
require_once 'config.php';

function getRecentForumTopics()
{
    $communityUrl = 'https://domain.tld/';
    $apiKey = '123';
    $endpoint = '/forums/topics';
    $vars = '?sortDir=desc&perPage=4';

    $curl = curl_init($communityUrl.'api'.$endpoint.$vars);
    curl_setopt_array(
        $curl,
        [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
            CURLOPT_USERPWD => "{$apiKey}:",
        ]
    );
    $response = curl_exec($curl);
    $values = json_decode($response, true);
    $data = [];
    foreach ($values['results'] as $value) {
        $data[] = [
            'title' => $value['title'],
            'url' => $value['firstPost']['url'],
        ];
    }

    return $data;
}

$data = array(
    "WebTitle" => "name",
    //"User" => User::GetData($_SESSION['user_id'])
    "recentFormTopics" => getRecentForumTopics() // <- This is where you are getting the data that is going to be available in twig
);

$loader = new Twig_Loader_Filesystem('templates/');
$twig = new Twig_Environment($loader, array(
'cache' => 'c_cache',
'debug' => 'false'
));

echo $twig->render('test.html', $data);

Итак, теперь, когда вы передаете data в test.html, обновите свой шаблон ветки, чтобы использовать его.

{{ include('includes/head.html') }}
<body> 
    {{ include('includes/nav.html') }}
    <section class = "container mt-3">
        <div class = "row">
            <div class = "col-12">
                <h2>Recent Topics</h2>
                {# This is where you will use the data being passed in #}
                <ol>
                {% for recentFormTopic in recentFormTopics %}
                    <li>
                        <a href = "{{ recentFormTopic.url }}" target = "_blank">{{ recentFormTopic.title }}</a>
                    </li>
                {% endfor %}
                </ol>
            </div>
        </div>
    </section>
   {{ include('includes/footer.html') }}
</body>
</html>

Другие вопросы по теме