Вывод постера в rss ленте

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Подскажите пожалуйста, как вывести ссылку на постер в rss ленте? Где находится шаблон rss, в core/rss.php я так понял генерируется что выводить а где отрисовка ее? Спасибо.
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
@ushkom, У RSS нет шаблона, страница генерируется "на лету" средствами php. Для добавления новых данных в элемент ленты, передайте дополнительный параметр с нужными данными в метод addItem и вызовете внутри него генерацию нового элемента: $item->appendChild($this->dom->createElement('ELEMENT_NAME', $YOUR_PARAM));.
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Что то не получается, вот что своял:
Код:
<?php

/**
*  rss.php
*  Генерация RSS-ленты
*  MSE-Script
*  https://mse-script.ru/
*  This code is protected by copyright
*/

namespace liw\core;

class rss extends controller
{
   protected static $instance;
   public $MSE = null;
   public $dom = null;
   public $channel = null;
   public $siteUrl = null;

   public function __construct ($MSE)
   {
      $this->MSE = $MSE;
      $this->dom = new \DOMDocument('1.0', 'utf-8');
      $this->dom->formatOutput = true;
      $this->siteUrl = $this->MSE->config['allow_https'] ? 'https://musicat.net' : 'http://' . $this->MSE->config['domain'] . '/';

      $root = $this->dom->appendChild($this->dom->createElement('rss'));
      $root->setAttribute('version', '2.0');
      $channel = $root->appendChild($this->dom->createElement('channel'));
      $channel->appendChild($this->dom->createElement('title', $this->MSE->config['main_title']));
      $channel->appendChild($this->dom->createElement('link', $this->siteUrl));
      $channel->appendChild($this->dom->createElement('description', $this->MSE->config['main_description']));
      $channel->appendChild($this->dom->createElement('poster', $this->MSE->config['main_poster']));
      $this->channel = $channel;
   }

   # Singleton контроллера
   public static function getInstance($data = NULL, $controllerName)
   {
      if (!is_object(self::$instance)) self::$instance = new rss($data);
      return self::$instance;
   }


   # Действие по-умолчанию
   # -----------------------------
   public function index ()
   {
      # Выборка треков из базы для отправки в ленту
      $stmt = $this->MSE->conn->prepare("SELECT
            name,
            url,
            poster,
            artist,
            description
         FROM
            tracks
         ORDER BY
            `id` DESC
         LIMIT
            10");

      $stmt->execute();
      $results = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);

      foreach ($results as $track) {
         $this->addItem($track['artist'].' - '.$track['name'], '/track/'.$track['url'], $track['description'], $track['poster']);
      }

      header("content-type: application/xml; charset=utf-8");
      print($this->dom->saveXML());
   }


   # Добавление нового элемента в ленту
   # -----------------------------
   public function addItem($title, $link, $description, $poster)
   {
      $item = $this->dom->createElement('item');
      $item->appendChild($this->dom->createElement('guid', md5($link)));
      $item->appendChild($this->dom->createElement('title', $title));
      $item->appendChild($this->dom->createElement('link', $this->siteUrl . $link));
      $item->appendChild($this->dom->createElement('description', $description));
      $item->appendChild($this->dom->createElement('content', $poster));
      $this->channel->appendChild($item);
   }
}
Хотелось бы собрать такую конструкцию:
Код:
<item turbo="true">
<title>Звголовок</title>
<link>
Ссылка
</link>
<description>
description - описание
</description>
<yandex:full-text>
<![CDATA[
<center><img src="постер"/></center><br> description - описание
]]>
</yandex:full-text>
<turbo:content>
<![CDATA[
<center><img src="постер"/></center><br> description - описание
]]>
</turbo:content>
</item>
Не могли бы помочь собрать, спасибо
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
@ushkom, Свой формат ленты нужно формировать внутри метода addItem.

$item->appendChild($this->dom->createElement('ELEMENT_NAME', $YOUR_PARAM));

превратится в:

<ELEMENT_NAME>YOUR_DATA</ELEMENT_NAME>

$item->appendChild($this->dom->createElement('content', $poster));
Таким же способом формируйте все остальные дочерние элементы.
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Подскажите пожалуйста, как правильно прописать элементы внутри PHP, ошибку выдает:
Код:
$item->appendChild($this->dom->createElement('turbo:content', '<![CDATA[<center><img src="'. $poster .'"/></center><br>'. $description .']]>'));
 
Последнее редактирование:

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Получилось так:
Код:
$item->appendChild($this->dom->createElement('full-text', '<![CDATA[<center><img src="'. $poster .'"/></center><br>'. $description .']]>'));
Но ругается если добавляю к элементам:
'yandex:full-text'
'turbo:content'

Как это подправить можно? Спасибо.
 
Последнее редактирование:
Сверху