0 Пользователей и 1 Гость просматривают эту тему.
  • 6 Ответов
  • 344 Просмотров
*

goga_pgasovav

  • Захожу иногда
  • 409
  • 4 / 0
  • Внимательный джумловод
Товарищи, в настройках каждой категории мы можем добавить изображение для этой категории.
И в шаблоне, например блога категории, вывод этого изображения делается вот так:

Код
<?php if ($this->params->get('show_description_image') && $this->category->getParams()->get('image')) : ?>
<img src="<?php echo $this->category->getParams()->get('image'); ?>" alt="<?php echo htmlspecialchars($this->category->getParams()->get('image_alt'), ENT_COMPAT, 'UTF-8'); ?>"/>
<?php endif; ?>

Как то же самое сделать внутри index.php шаблона?

Определять, что  в данный момент отображается категория, я умею:
Код
function showPage($x = array()){ return array_intersect_assoc($x,  $_REQUEST) == $x; }
if (showPage(array('option' => 'com_content', 'view' => 'category'))) { ... }

Но как добраться до остальных параметров категории я пока не знаю.
Заранее спасибо всем, кто может объяснить, как это делается.
« Последнее редактирование: 12.07.2024, 16:11:42 от goga_pgasovav »
*

goga_pgasovav

  • Захожу иногда
  • 409
  • 4 / 0
  • Внимательный джумловод
Немного продвинулся в этой задаче:

Код
<?php if (showPage(array('option' => 'com_content', 'view' => 'category'))) {

$cat_id = $app->input->getInt('id', 0);
$db = JFactory::getDbo();
$query = $db
    ->getQuery(true)
    ->select($db->quoteName('params'))
    ->from($db->quoteName('#__categories'))
    ->where($db->quoteName('id'). ' = ' .$cat_id);
$db->setQuery($query);
$params = $db->loadObjectList();
var_dump($params);
} ?>

В var_dump() получаю такой объект:

Код
object(stdClass)#878 (1) {
  ["params"]=>
  string(108) "{"category_layout":"","image":"images\/backgrounds\/Bildschirmfoto_2024-06-06_um_191317.png","image_alt":""}"
}

А что делать дальше не знаю   !!!???!!!

*

fbr

  • Завсегдатай
  • 1631
  • 192 / 7
попробуйте так:
$params = json_decode($params);
$my_img = $params->image;
*

goga_pgasovav

  • Захожу иногда
  • 409
  • 4 / 0
  • Внимательный джумловод
попробуйте так:
$params = json_decode($params);
$my_img = $params->image;
Спасибо! Пробовал json_decode, ничего не выводит.

Попробовал ещё explode, предварительно заменив LoadObject на LoadResult в getDbo() запросе.
Код
$param = explode(',', $params);
echo $param[1];

Получаю опять строку:
Код
"image":"images\/backgrounds\/Bildschirmfoto_2024-06-06_um_191317.png"
  :dry:
*

goga_pgasovav

  • Захожу иногда
  • 409
  • 4 / 0
  • Внимательный джумловод
В итоге домучал до вот такого, на мой взгляд совсем некрасивого, решения:

Код
//get category image
if (showPage(array('option' => 'com_content', 'view' => 'category'))) {
$cat_id = $app->input->getInt('id', 0);
$db = JFactory::getDbo();
$query = $db
    ->getQuery(true)
    ->select($db->quoteName('params'))
    ->from($db->quoteName('#__categories'))
    ->where($db->quoteName('id'). ' = ' .$cat_id);
$db->setQuery($query);
$params = $db->loadResult();
$param = explode(',', $params);
$bckgrnd = str_replace(str_split('\\"'), '', explode(':', $param[1])[1]);
}

Таким образом я получаю из параметра image путь к изображению категории.
Естественно можно получить другой параметр, указав его номер вместо первого '[1]'.

Далее, в нужном месте выводим это изображение в виде фона.
В моём случае я этот фон вешаю на wrapper верхнего уровня, т.е. <body>.

Код
<body<?php if ($bckgrnd != null) { echo ' style="background-image: url('.$bckgrnd.');"'; } ?>>

Возможно кто-то знает, как сделать оптимальнее, и без getDbo(), буду признателен.
*

fbr

  • Завсегдатай
  • 1631
  • 192 / 7
у меня работает вот так
Код
<?php function showPage($x = array()){ 
return array_intersect_assoc($x,  $_REQUEST) == $x;
}
if (showPage(array('option' => 'com_content', 'view' => 'category'))) {

$cat_id = $app->input->getInt('id', 0);
$db = JFactory::getDbo();
$query = $db
    ->getQuery(true)
    ->select($db->quoteName('params'))
    ->from($db->quoteName('#__categories'))
    ->where($db->quoteName('id'). ' = ' .$cat_id);
$db->setQuery($query);
//$_params = $db->loadObjectList();
$_params = $db->loadResult();
var_dump($_params);
$dfd = json_decode($_params);
$myimg = $dfd->image;
echo '<p>' . $myimg . '</p>';
} ?>
*

goga_pgasovav

  • Захожу иногда
  • 409
  • 4 / 0
  • Внимательный джумловод
Спасибо! Так действительно оптимальнее, хотя я думал как-то обойтись без getDbo().
Итоговый вариант:

Код
function showPage($x = array()){ return array_intersect_assoc($x,  $_REQUEST) == $x; }
if (showPage(array('option' => 'com_content', 'view' => 'category'))) {
    $cat_id = $app->input->getInt('id', 0);
    $db = JFactory::getDbo();
    $query = $db
        ->getQuery(true)
        ->select($db->quoteName('params'))
        ->from($db->quoteName('#__categories'))
        ->where($db->quoteName('id'). ' = ' .$cat_id);
    $db->setQuery($query);
    $params = json_decode($db->loadResult());
    $bckgrnd = str_replace(str_split('\\"'), '', $params->image);
}

str_replace и str_split выполняются для того, чтобы привести в порядок url изображения
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Перестали работать переходы по меню сайта

Автор AlexP750

Ответов: 12
Просмотров: 717
Последний ответ 06.02.2024, 12:42:26
от AlexP750
Блог | Тайтл, description подкатегории

Автор darkghost

Ответов: 0
Просмотров: 279
Последний ответ 02.02.2024, 22:25:53
от darkghost
Получить ошибку

Автор KevinSimon

Ответов: 0
Просмотров: 324
Последний ответ 22.09.2023, 15:20:21
от KevinSimon
Получить текущий номер страницы плагина "Разрыв страницы" (pagebreak)

Автор sertlan

Ответов: 1
Просмотров: 521
Последний ответ 12.06.2023, 18:14:09
от sertlan
[Решено] Ссылка на домен и текущий шаблон в блоге категории

Автор goga_pgasovav

Ответов: 2
Просмотров: 438
Последний ответ 06.03.2023, 16:30:23
от goga_pgasovav