Vzhľadom na to, že tá trieda rieši celý stock a chcelo by to širšiu úpravu, asi bude odpoveď nie
Stock status output
-
mino182
- Phoca Professional

- Posts: 224
- Joined: 12 Feb 2015, 13:30
Stock status output
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.
Vzhľadom na to, že tá trieda rieši celý stock a chcelo by to širšiu úpravu, asi bude odpoveď nie
Tags:
- Jan
- Phoca Hero

- Posts: 49049
- Joined: 10 Nov 2007, 18:23
- Location: Czech Republic
- Contact:
Re: Stock status output
Ahoj, přidáno do FR: https://github.com/PhocaCz/PhocaCart/issues/268
V Joomle nelze provést override tříd.
V Joomle nelze provést override tříd.
If you find Phoca extensions useful, please support the project
-
Cony
- Phoca Member

- Posts: 16
- Joined: 24 Mar 2011, 15:51
Re: Stock status output
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ý)
a pozměněná třída takto
Jinak samozřejmě ano, veškeré výstupy by měly být v layout.
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');
}
}
Code: Select all
class WrapperController extends overrideWrapperController
{
public function display($cachable = false, $urlparams = array())
{
...
}
}
-
mino182
- Phoca Professional

- Posts: 224
- Joined: 12 Feb 2015, 13:30
Re: Stock status output
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.
Lebo to by vyriešilo problém s updatami - ak sa nejaká funkcia časom pridá, nebudem to musieť furt kontrolovať...
Díky.