Forums / National / Russian / Оптимальный путь решения?

Kort
#48080 2024-07-12 12:21

Простой вариант баннерной системы:

  1. Баннеры храним в массиве, который кэшируем. С отключенным кэшем массив просто будет считываться из файла.
  2. Для каждого баннера можем определить не менее одного:
    • имени файла с  картинкой, 
    • ссылки,
    • описания 1,
    • описания 2.
  3. Если какое-то из свойств указано в количестве более одного, то при выводе оно рандомизируется. Если рандомизации не требуется, указываем только одно.
  4. Разметка баннера формируется в TPL-шаблоне.
  5. Вывод в шаблоне формируется с помощью двух функций:
    • проверка наличия баннера для данной страницы,
    • вывод баннера.
  6. Картинки выгружаем по ftp в папку, указанную в .gitignore

Пример файла настроек массива:

<?php
/**
 * SBS Plugin Settings
 *
 * @package sbs
 * @version 1.00
 * @author SED.BY
 * @copyright (c) sed.by 2024
 */

defined('COT_CODE') or die('Wrong URL');

define('SBS_REALM', '[SEDBY] SBS Simple Banner System');

if ($cache && $cache->db->exists('banners', SBS_REALM)) {
	$sbs_banners = $cache->db->get('banners', SBS_REALM);
} else {

	$sbs_banners = [
		'page' => [
	    '1' => [
	  		'image' => [
					'astronaut.jpg',
					'pilot.jpg',
				],
	  		'link' => [
					'https://sed.by/blog',
					'https://sed.by/archive',
				],
	  		'text_1' => [
					'Астронавт',
					'Космонавт',
				],
	  		'text_2' => [
					'Изображение астронавта',
					'Картинка космонавта',
				],
	  	],
	  	'2' => [
	  		'image' => [
					'desktop.jpg',
				],
	  		'link' => [
					'https://sed.by/cot',
				],
	      'text_1' => [
					'Десктоп',
				],
	      'text_2' => [
					'Изображение десктопа',
				],
	  	],
	  ],
	];

	$cache && $cache->db->store('banners', $sbs_banners, SBS_REALM, Cot::$cfg['plugin']['sbs']['cache']);
}

Пример шаблона баннера:

<!-- BEGIN: MAIN -->
<a href="{BANNER_LINK}" title="{BANNER_TEXT_1}" class="mb-3 d-block" {BANNER_REL}>
  <img src="{BANNER_IMAGE}" alt="{BANNER_TEXT_2}" class="img-fluid">
</a>
<!-- END: MAIN -->

Пример вывода баннера:

<!-- IF {PHP.id|sedby_banner_exists('page', $this)} === true -->
{PHP.id|sedby_banner('sbs.partner', 'page', $this, 'random')}
<!-- ENDIF -->

Подробное описание | Git-репозиторий

SED.by - создание сайтов, разработка плагинов и тем для Котонти