Ilość stron podpiętych do danej kategorii na drzewku

malavva

Avatar: malavva

2011-03-15 15:30

Próbowałem dodać w liście wyświetlanej przez menu_3.tpl oraz pages_default.tpl liczbę stron/produktów, która jest podpięta pod dany punkt listy. Czyli inaczej mówiąc, na stronie przy danym linku w nawiasie wyświetla się ilość stron/produktów.
Np
Obuwie
- sandały (25)
- kozaki (10)
- ciapy (21)
- szpilki (1)

i nie chodzi mi o ilości magazynowe, tylko ile stron/produktów podpiętych jest do danej kategorii.
Ponieważ u mnie jeden produkt = jedna strona, dlatego piszę produkt/strona. Wszystko jedno czy liczyłbym strony czy produkty. Tylko że w obrębie strony zawsze policzy jeden produkt...

W pliku pages.php jest funkcja: function listSubpages( $iPage, $sFile, $iType ), która zawiera zmienną $iCount = count( $this->aPagesChildrens[$iPage] ). Jak tą zmienną przekazuję na stronę, to wyświetla mi ilość stron/produktów w bieżącej kategorii, dla powyższego przykładu:

Obuwie
- sandały (4)
- kozaki (4)
- ciapy (4)
- szpilki (4)

(bo są 4 podstrony strony "Obuwie").
W jaki sposób pobrać informację o ilości stron sięgając poziom niżej? Czy tu przypadkiem nie trzeba wywołać funkcji listSubpages w samej sobie?


Zrobiłem taką funkcję w pages.php
function countSubpages( $dana ){
if( isset( $this->aPagesChildrens[$dana] ) ){
$iCount = count( $this->aPagesChildrens[$dana] );
$this->$iCount;
}
}

Próbuję się do tej funkcji odwołać w pętli funkcji listSubpages.

function listSubpages( $iPage, $sFile, $iType ){
.....
$iCountChildren = $this->countSubpages(???);
$oTpl->setVariables( 'ilosc', $iCountChildren );
$oTpl->setVariables( 'aData', $aData );
$content .= $oTpl->tbHtml( $sFile, 'SUBPAGES_LIST_'.$iType );
....}

ale niestety, za mało umiem i wiem, żeby wiedzieć, co przekazać do tej mojej funkcji. Jak skonstruować zmienną niosącą informację o podstronie danej strony wyliczonej przez zmienną $i, i przekazać ją do funkcji countSubpages?

Nie wiem czy to dobry trop, ale nic innego sensownego nie przychodzi mi już do głowy. Poproszę o jakiś namiar, podpowiedź.
Pozdrawiam!

» Quick.Cart v3.x

Malavva

Makaron

Avatar: Makaron

2011-03-15 16:10

Hmm.. jest taki plugin w dziale: http://opensolution.org/download,en,18.html?sDir=Quick.Cart/plugins nazywa się productsInCategory_v0.1.zip

Mak-Web.pl - Quick.Cart & Quick.Cms templates

malavva

Avatar: malavva

2011-03-16 13:01

Działa pod wersją 3.7, jednak pojawia się drobny problem (w wersji 4.0 też jest) gdy do strony nie są podpięte produkty. Wywala komunikat "Notice: Undefined index: 19 in C:\www\content\www\core\pages.php on line 432 ", gdzie index jest numerem ID strony, do której nie jest podpięty żaden produkt. Poniżej zaznaczyłem linię 432. Generalnie to działa i nawet nie jest tak bardzo uciążliwe, ale nie wiem do końca jak zrobić wyjątek na sytuację, gdy produktu brak w kategorii, żeby nie wyrzucało komunikatów.

Pozdrawiam!

/**
* Define to array products count for subpages
* @return void
* @param array $aPagesParent
* @param int $iPageParent
*/
private function definePagesParentsProductsCount( $aPagesParent, $iPageParent ){
$iCount = count( $aPagesParent );
foreach( $this->aPagesChildrens[$iPageParent] as $iKey => $iPageSubpage ){
if( $this->aPages[$iPageSubpage]['iProducts'] == 1 ){
if( !isset( $aPagesProducts[$iPageSubpage] ) )
$aPagesProducts[$iPageSubpage] = 0;
for( $i = ( $iCount - 1 ); $i >= 0; $i-- ){
$iPage = $aPagesParent[$i];
if( !isset( $this->aPages[$iPage]['iProductsCount'] ) )
LINIA 432--->> $this->aPages[$iPage]['iProductsCount'] = 0;
$this->aPages[$iPage]['iProductsCount'] += $this->mData['aPagesProducts'][$iPageSubpage];
} // end for

if( isset( $this->aPagesChildrens[$iPageSubpage] ) ){
$aPagesParent[] = $iPageSubpage;
$this->definePagesParentsProductsCount( $aPagesParent, $iPageSubpage );
}
}
}
} // end function definePagesParentsProductsCount

Malavva

boboo

Avatar: boboo

2011-03-16 15:41

hmmm, a nie machnąłeś się z numerem linii?
Bo mi pomogła zmiana w linijce poniżej.
Zamieniłem:
$this->aPages[$iPage]['iProductsCount'] += $this->mData['aPagesProducts'][$iPageSubpage];
na:
$this->aPages[$iPage]['iProductsCount']+=isset($this->mData['aPagesProducts'][$iPageSubpage])?&# 36;this->mData['aPagesProducts'][$iPageSubpage]:0;

http://it-service.kimla.de QC- & QCMS-plugins

malavva

Avatar: malavva

2011-03-17 08:39

Tak, machnąłem się. Działa! Wielkie dzięki!

Dorzucę jeszcze tylko jeden drobiazg do tego plugina. Gdy w bazie nie ma wogóle produktów, to wyrzuca komunikat:
Warning: Invalid argument supplied for foreach() in C:\www\content\www\core\pages.php on line 393
To chodzi o tą funkcję:

public function definePagesProductsCount( ){
$oProduct = Products::getInstance( );

-->> foreach( $oProduct->aProductsPages as $iProduct => $aPages ){
foreach( $aPages as $iPage ){
if( !isset( $this->mData['aPagesProducts'][$iPage] ) )
$this->mData['aPagesProducts'][$iPage] = 0;
$this->mData['aPagesProducts'][$iPage]++;
}
}

To nie jest problem, bo zazwyczaj w bazie jest jakiś produkt. Piszę tak na wszelki wypadek o nim.

Jeszcze raz dziękuję za pomoc!

Malavva

Do góry
o nas | kontakt