Page 1 of 1

not combinable products info - plugin

Posted: 27 Oct 2023, 23:43
by mino182
Ahoj Jan, prosím mohol by si mi poradiť, či je možné v PCV plugine v checkoute, načítať obsah košíka s parametrami položiek? Mám problém s tým, že mám dva druhy tovaru - niečo doručujem cez dropshipping a niečo mám sám skladom, čiže tieto veci sa nesmú stretnúť v jednej objednávke, kvôli rozdielnej doprave.

Riešim to tak, že mám nastavenú pri tovaroch dĺžku a šírku. Pri svojich produktoch malú šírku a veľkú dĺžku a pri dropshipping produktoch presne naopak. A na dopravách mám pravidlá veľkostí "od-do". Takto viem docieliť to, že sa mi vždy zobrazí správna doprava ak sú v košíku tovary jedného druhu, alebo žiadna doprava, ak sú v košíku obidva druhy. Toto by sa inak neskutočne uľahčilo, keby sa v doprave pridalo "pravidlo manufacturer", alebo keby PCS plugin mohol vidieť tovary v košíku a ich výrobcov :-)

V default_shipping.php view potom zobrazujem hlášku o "nekombinovateľnom tovare" keď je

Code: Select all

(empty ($this->t['shippingmethods']))
...

No a rád by som pridal konkrétnejšie info aj do košíkovej časti checkoutu, vyhovuje na to event "onPCVonCheckoutAfterCart" ale v default PCV plugine som nenašiel pri žiadnom evente parameter, ktorý by obsahoval niečo, na základe čoho by som mohol rozlíšiť tovar. Je tam len parameter $total (ktorému presne nerozumiem, lebo v tom poli je 5x vnorené to isté pole), kde sú nasčítané údaje z košíka. Je prosím nejaký event, kde sa tovary z košíka posielajú a dal by sa v PCV plugine použiť? Alebo je na to iný spôsob?

Ďakujem, za akékoľvek nasmerovanie.

Re: not combinable products info - plugin

Posted: 28 Oct 2023, 23:14
by Jan
Ahoj, nevím jestli by přidání pravidla manufacturer řešilo problém, protože pokud by v košíku byly dva výrobky, každý od jiného výrobce, stejně pak není možnost to nějak vyřešit.

Pokud plugin nemá informaci z košíku, může si stejně jako např. modul košíku třídu košíku inicializovat a dostat tak všechny informace z košíku. Zkuse se podívat na modul košíku (mod_phocacart_cart), tam je kód na inicializaci košíku ( $cart = new PhocacartCartRendercart();) a poté kroky k načtení informací z košíku.

Re: not combinable products info - plugin

Posted: 29 Oct 2023, 00:14
by mino182
Ahoj, myslel som to tak, že by bolo pravidlo "LEN vybraný výrobca/výrobcovia", tzn. ak by bol v košíku aj iný výrobca, daná doprava by sa nezobrazila. Takže by teoreticky mohli byť zadefinované aj 3 dopravy:
1 - výrobca A - cena 5€
2 - výrobca B - cena 4€
3 - výrobca A+B = cena 9€

1 sa zobrazí, keď bude v košíku len A, 2 keď len B, 3 keď len A spolu s B.
Ale dalo by sa to rozšíriť o prepínač Only / Include / Exclude a tam už by sa s tým dalo robiť úplne kadečo...
Myslím, že dnes keď kadekto predáva kadejaký "merch", kde je plno výrobcov, rôznych vecí, ktorí poskytujú dropshipping, bude takáto potreba rásť... Ale nebudem ťa do toho nútiť :D

Ďakujem za radu, PhocacartCartRendercart() sa mi ale podarilo dostať len formátované dáta, ale s PhocacartCart() by to mohlo fungovať, lebo v podstate potrebujem len id tovarov, aby som pomocou nich dostal použitých výrobcov, akurát tie id tovarov sú len ako keys v tom poli a majú aj nejaký "token" pri sebe, takže ID tovaru vyzerá takto: "113:YToxOntpOjEzMDthOjE6e2k6MTMxNjtpOjEzMTY7fX0=:". Ja by som potreboval z toho len to "113", ale neviem ako :idea:, poradil by si mi pls nejaký spôsob? potom by mi mohlo fungovať toto:

Code: Select all

$kosik = new PhocacartCart();
		foreach($kosik->getItems() as $key=>$value)
		{
			$ids.= $key.',';
		}
		$vyrobcovia = PhocacartManufacturer::getManufacturersByIds($ids);
A potom by som vedel podľa potreby deaktivovať dopravu v evente "onPCSbeforeShowPossibleShippingMethod" a aj zobraziť v košíku info cez "onPCVonCheckoutAfterCart".

Re: not combinable products info - plugin

Posted: 29 Oct 2023, 10:45
by mino182
Ahoj, toto mi technicky funguje, vypne to dopravu, keď je v košíku aj iný ako zadaný výrobca (v parametroch pluginu). Ale prosím pozrieš sa na to, či je to ok? či je to nerobí niečo zbytočné, čo by nemuselo? Díky.

Code: Select all

function onPCSbeforeShowPossibleShippingMethod(&$active, $params, $eventData){

		if (!isset($eventData['pluginname']) || isset($eventData['pluginname']) && $eventData['pluginname'] != $this->name) {
			return false;
		}

		$paramsMethod = $params->params;// parameters of shipping method - get current parameters from current shipping method options

		$registry = new Registry;
		$registry->loadString($paramsMethod);
		$paramsMethod = $registry;
		
		$manid = (int)$paramsMethod->get('man_id', '');
		

		$kosik = new PhocacartCart();
		foreach($kosik->getItems() as $key=>$value)
		{
			$id = (int)$key;
			$ids.= $id.',';
		}
		$ids = rtrim($ids, ',');
		$manuf = PhocacartManufacturer::getManufacturersByIds($ids);
		foreach ($manuf as $m)
		{
			if ($m != $manid) {

				// Shipping plugin can disable/deactivate current shipping method in possible shipping method list based on own rules
				$active = false;
				return true;
			}
		}
		return true;

	}

Re: not combinable products info - plugin

Posted: 30 Oct 2023, 00:33
by Jan
Ahoj,

toto je ""113:YToxOntpOjEzMDthOjE6e2k6MTMxNjtpOjEzMTY7fX0=:"" token produktu včetně vybraných variant, ID z něho dostaneš pomocí PHP metody, např. pomocí https://www.php.net/manual/en/function.explode.php, kdy rozdělíš string dvojtečkou (:) a dostaneš pole s ID a tokenem zvlášť.

Ta funkce, kterou jsi vytvořil se prostě musí otestovat na všechny možné varianty. Jen pohledem na ni prostě nezjistím, jak se bude chovat :-(

Re: not combinable products info - plugin

Posted: 30 Oct 2023, 10:29
by mino182
Ahoj, diky. Nakoniec som zistil, ze kedze je to id na zaciatku, dostanem ho aj funkciou (int). (ale neviem co je vykonovo efektivnejsie...). Tu funkciu som otestoval, funguje tak ako som chcel. Myslel som skor z logickeho / efektivneho hladiska, ci to je ok, ze najprv dostanem jednym cyklom z triedy PhocacartCart() id-cka a potom este druhym cyklom z PhocacartManufacturer vyrobcov. Ci tie produkty nemaju v nejakej inej triede rovno aj vyrobcov, ci to takto nespomali nacitavanie, alebo tak... sorry nevidim do toho z tejto "vykonovej stranky"...

Re: not combinable products info - plugin

Posted: 31 Oct 2023, 18:16
by Jan
Ahoj, metody jsou různé a určitě v některých bude i informace o výrobci. A ano, z hlediska výkonu jde o to, načítat jen to nejnutnější na určitých místech. Takže ano, šlo by všude načítát základ plus všechny informace kolem, ale pak by se stránka načítala o pár sekund dýl :-(