PDA

Zobacz pełną wersję : Cannot access protected property ... ::$pageclass_sfx



czykcinek
28-02-2023, 15:18
Po zaktualizowaniu Joomli z 3.10 na 4.2.8 wyświetlało się dużo błędów, które poprawiłem ale jest jeden, najprawdopodobniej ostatni, którego nie mogę przejść
Cannot access protected property Joomla\Component\Content\Site\View\Article\HtmlVie w::$pageclass_sfx

Problem polega na tym, że przy próbie sprawdzenia poprzez "dd($component)" obiekt pageclass_sfx jest zwracany pusty.

kod zawarty w pliku, który podaje Joomla w błędzie.
Pogrubiony tekst to linia, o której mówi Joomla.

<?php
defined('_JEXEC') or die;

/**
* Contains the article factory method and content component rendering helpers.
*/
Core::load("Core_Content_ArchivedArticle");
Core::load("Core_Content_SingleArticle");
Core::load("Core_Content_CategoryArticle");
Core::load("Core_Content_FeaturedArticle");

class CoreContent
{
protected $_component;
protected $_componentParams;

public $pageClassSfx;

public $pageHeading;

public function __construct($component, $params)
{

$this->_component = $component;
$this->_componentParams = $params;

$this->pageClassSfx = $component->pageclass_sfx;
$this->pageHeading = $this->_componentParams->get('show_page_heading', 1)
? $this->_componentParams->get('page_heading') : '';
}

W przypadku gdy zakomentuję te linię strona się odpala ale rozjeżdża się menu na stronie.

Próbowałem robić to co podają tutaj:
https://forum.joomla.org/viewtopic.php?f=466&t=307363&start=30
https://forum.joomla.org/viewtopic.php?t=987911

ale nie pomogło

siristru
01-03-2023, 11:08
"Pageclass_sfx" to "page class suffix" czyli przyrostek klasy css strony. Sprawdź w pozycji menu czy w ogóle używasz tego przyrostka.
"Rozjechanie" menu wcale nie musi mieć związku z przyroskiem.

W każdym razie, w swoim szablonie używam go w ten sposób:


use Joomla\CMS\Factory;
$app = Factory::getApplication();
$menu = $app->getMenu()->getActive();
$input = Factory::getApplication()->input;
$active = $input->get('Itemid', '');
$params = $menu->getParams($active);

I wywołuję jego wartość:


echo $params->get('pageclass_sfx');

Można o wiele prościej:


use Joomla\CMS\Factory;
$app = Factory::getApplication();
$menu = $app->getMenu()->getActive();
$params = $menu !== null ? $menu->getParams()->get('pageclass_sfx', '') : '';

Ale podejrzewam, że nawet jak twój szablon dostanie "Pageclass_sfx" to menu będzie rozjechane.

Możesz spróbować zastosować powyższe kody w ten sposób:


$this->pageClassSfx = $params;

Obojętnie który kod wykorzystasz.