Page 1 of 1
Stock status output
Posted: 21 Oct 2025, 17:37
by mino182
Ahoj, prosím náhodou neplánuješ spraviť stock status output nejakým spôsobom štýlovateľný? Napr. potreboval som upraviť, aby sa počet položiek skladom zobrazoval len od určitého počtu a tiež som za číslo chcel pridať "m", lebo predávam na metre tak som si upravil triedu PhocacartStock::getStockStatusOutput, lenže to nie je veľmi trvácne riešenie kvôli updatom... Napadlo ma, či by nešlo generovanie toho outputu spraviť ako layout, aby sa dal upravovať v šablóne?
Vzhľadom na to, že tá trieda rieši celý stock a chcelo by to širšiu úpravu, asi bude odpoveď nie

, mohol by si mi prosím poradiť, ako udržať takýto typ úpravy aj po update komponentu? Je v Joomle nejako možné urobiť override triedy v libraries? Díky.
Re: Stock status output
Posted: 22 Oct 2025, 16:13
by Jan
Ahoj, přidáno do FR:
https://github.com/PhocaCz/PhocaCart/issues/268
V Joomle nelze provést override tříd.
Re: Stock status output
Posted: 22 Oct 2025, 16:48
by Cony
Override tříd lze provést takovým drobným "hackem". Pointa je zaregistrovat třídu, dřív než se zaregistruje komponentou, tzn. vytvořit systémový plugin který hned v OnAfterRoute zaregistruje třídu s příslušným jménem. Pak se všude v kódu při volání té třídy použije tvoje upravená třída.
Pokud ji nechceš přepisovat celou, přichází na řadu "hack" - původní soubor třídy načíst do paměti, pozměnit jméno třídy a odvodit novou třídu od té změněné.
V pluginu to pak může vypadat nějak takto (kód je pro J3, ale princip je stejný)
Code: Select all
protected function overrideClass($class, $file)
{
if (JFile::exists(JPATH_ROOT . $file)) {
$content = JFile::read(JPATH_ROOT . $file);
$content = str_replace('<?php', '', $content);
$content = preg_replace('~class\s+' . $class . '~i', 'class override' . $class, $content, 1);
eval($content);
require_once (__DIR__ . '/overrides/' . $class . '.php');
}
}
public function onAfterRoute()
{
$input = $this->app->input;
if ($input->get('option') === 'com_wrapper') {
$this->overrideClass('WrapperController', '/components/com_wrapper/controller.php');
}
}
a pozměněná třída takto
Code: Select all
class WrapperController extends overrideWrapperController
{
public function display($cachable = false, $urlparams = array())
{
...
}
}
Jinak samozřejmě ano, veškeré výstupy by měly být v layout.
Re: Stock status output
Posted: 22 Oct 2025, 17:13
by mino182
A prosím ťa, musí sa tá trieda registrovať so všetkými funkciami naraz? Myslím, že či by šlo, že v plugine vytvorím tú triedu (s rovnakým názvom) len s jednou funkciou, ktorú potrebujem zmeniť a ostatné by sa potom zaregistrovali z komponenty? Či keď už raz trieda existuje, tak je koniec a ostane celá taká ako bola zaregistrovaná prvýkrát?
Lebo to by vyriešilo problém s updatami - ak sa nejaká funkcia časom pridá, nebudem to musieť furt kontrolovať...
Díky.