Wyszukiwarka po cenie

polecam

Avatar: polecam

2013-12-17 23:16

Dobry wieczór,
jest możliwość by do wyszukiwarki dodać jeszcze wyszukiwanie po cenie? Wiem, że jest taka funkcja w wersji płatnej z tego co widziałem ale zastanawiam się czy można by jakoś dodać to w wersji darmowej?
Przeglądałem forum i znalazłem jedynie coś na temat dodawania kolejnych baz jak dobrze zrozumiałem: http://opensolution.org/forum/wyszukiwarka-dodanie-kolejnej-bazy,8243.html http://opensolution.org/forum/wyszukiwarka-a-cechy-produktu-jak-polaczyc-,7036.html
Będę wdzięczny za każdą poradę / podpowiedź.
Pozdrawiam

» Quick.Cart v6.x

boboo

Avatar: boboo

2013-12-18 06:23

Kiedyś się w to bawiłem w wersji QC4.x
http://www.kimla.de/qc42adsearch/
Trzebaby dopasować deczko do wersji QC6.x
Poniżej zmieniona funkcja z QC4.2
Porównaj z oryginalną i dopasuj do QC6.x
Oczywiście trzeba jeszcze dodać pola i wprowadzić mała korektę w index.php
Ja na razie mam mało ochoty na dopasowanie do wersji 6.x (chyba, że mnie przekonasz :-) )


public function generateProductsSearchListArray($sPhrase){
 if(isset(
$this->aProducts)){
  
$aExp=explode(' ',$sPhrase);
  
$iCount=count($aExp);
  for(
$i=0;$i<$iCount;$i++){
   
$aExp[$i]=trim($aExp[$i]);
   if(!empty(
$aExp[$i]))
    
$aWords[]=$aExp[$i];
  } 
// end for
  
if(isset($aWords)&&is_array($aWords)&&function_exists('saveSearchedWords')&&defined('CUSTOMER_PAGE'))
   
saveSearchedWords($aWords);
  
$iCount=isset($aWords)?count($aWords):0;
  foreach(
$this->aProducts as $iProduct=>$aData){
   
$iFound=0;
   
$sSearchData=implode(' ',$aData);
   if(isset(
$sPhrase)&&!empty($sPhrase)){
    for(
$i=0;$i<$iCount;$i++){
     if(
stristr($sSearchData,$aWords[$i]))
      
$iFound++;
    } 
// end for
    
if($iFound==$iCount)
     
$aFound[$iProduct]=true;
    else
     
$aNotFound[$iProduct]=true;
   }
  }
  if(isset(
$aNotFound)&&($GLOBALS['config']['search_products_description']===true||!defined('CUSTOMER_PAGE'))){
   
$rFile=fopen(DB_PRODUCTS_EXT,'r');
   
$i2=0;
   while((
$aFile=fgetcsv($rFile,200000,'$'))!==FALSE){
    if(
$i2>=1&&isset($aNotFound[$aFile[0]])){
     
$iFound=0;
     
$sSearchData=implode(' ',$aFile);
     for(
$i=0;$i<$iCount;$i++){
      if(
stristr($sSearchData,$aWords[$i]))
       
$iFound++;
     } 
// end for
     
if($iFound==$iCount)
      
$aFound[$aFile[0]]=true;
    }
    
$i2++;
   } 
// end while
   
fclose($rFile);
  }
  foreach(
$this->aProducts as $iProduct=>$aData){
   if(
    isset(
$GLOBALS['sPriceFrom'])
    &&
is_numeric($GLOBALS['sPriceFrom'])
    &&
$GLOBALS['sPriceFrom']>0
    
&&$GLOBALS['sPriceFrom']<=$this->aProducts[$iProduct]['mPrice']
    &&!isset(
$GLOBALS['sPriceTo'])
    )
   {
    
$aFoundPrice[$iProduct]=true;
   }
   else if(
    isset(
$GLOBALS['sPriceTo'])
    &&
is_numeric($GLOBALS['sPriceTo'])
    &&
$GLOBALS['sPriceTo']>0
    
&&$GLOBALS['sPriceTo']>=$this->aProducts[$iProduct]['mPrice']
    &&(!isset(
$GLOBALS['sPriceFrom'])||$GLOBALS['sPriceFrom']==0)
    )
   {
    
$aFoundPrice[$iProduct]=true;
   }
   else if(
    isset(
$GLOBALS['sPriceFrom'])
    &&
is_numeric($GLOBALS['sPriceFrom'])
    &&
$GLOBALS['sPriceFrom']>0
    
&&isset($GLOBALS['sPriceTo'])
    &&
is_numeric($GLOBALS['sPriceTo'])
    &&
$GLOBALS['sPriceTo']>0
    
&&$GLOBALS['sPriceFrom']<=$this->aProducts[$iProduct]['mPrice']
    &&
$GLOBALS['sPriceTo']>=$this->aProducts[$iProduct]['mPrice']
    )
   {
    
$aFoundPrice[$iProduct]=true;
   }
  }
  if(isset(
$aFound)&&isset($aFoundPrice)){
   
$fCount=count($aFound);
   
$aFoundKeys=array_keys($aFound);
   for(
$i=0;$i<$fCount;$i++){
    
$iKeyFound=$aFoundKeys[$i];
    if(isset(
$aFoundPrice[$iKeyFound])){
     
$aFoundAll[$iKeyFound]=true;
    }
   }
  }
  if(isset(
$sPhrase)&&!empty($sPhrase)&&(!isset($aFoundPrice)||empty($aFoundPrice)))
   
$aFound=$aFound;
  if((!isset(
$sPhrase)||empty($sPhrase))&&isset($aFoundPrice)&&!empty($aFoundPrice))
   
$aFound=$aFoundPrice;
  if(isset(
$sPhrase)&&!empty($sPhrase)&&isset($aFoundPrice)&&!empty($aFoundPrice))
   
$aFound=isset($aFoundAll)?$aFoundAll:null;
  if(isset(
$aFound)){
   foreach(
$this->aProducts as $iProduct=>$aData){
    if(isset(
$aFound[$iProduct]))
     
$aReturn[]=$iProduct;
   }
   if(isset(
$aReturn))
    return 
$aReturn;
  }
 }
// end function generateProductsSearchListArray

boboo :-)

polecam

Avatar: polecam

2013-12-18 08:52

boboo Ty to jesteś specjalista;) Wykonanie skórki pod wybraną wersję Quick Cart lub Quick Cms za dopasowanie do wersji 6.x? ;>

boboo

Avatar: boboo

2013-12-18 09:15

pokaż mi parę przykładów skórek, a powiem Ci... :-)
Prawdą jest, że przydałaby mi się ładna szata graficzna do tego:
http://www.kimla.de/qc6test/
Tematyka strzelecka. Sport strzelecki, nie myśliwstwo.
I badziej poszukuję koncepcji graficznej. Bo jak coś ładnego zobaczę - tylko naprawdę musi mnie to wizualnie przekonać - to "wprogramować" mogę to sobie sam ;-)

boboo :-)

polecam

Avatar: polecam

2013-12-18 09:18

Podaj e-mail ;)

boboo

Avatar: boboo

2013-12-18 09:22

bogdan małpa kimla.de

boboo :-)

boboo

Avatar: boboo

2013-12-20 09:22

Na razie zrobiłem liczniki odwiedzin stron i produktów:
http://www.kimla.de/qc6test/
(admin, admin)
Przez święta powinienem wyrobić się czasowo z wyszukiwaniem po cenach.
:-)

boboo :-)

polecam

Avatar: polecam

2013-12-20 09:59

A jak wykonać taki licznik odwiedzin stron i produktów?

boboo

Avatar: boboo

2013-12-20 10:28

zdefiniować w general.php odpowiednie bazy:
DB_PAGES_VIEWS i DB_PRODUCTS_VIEWS
(tak jak są zdefinowane np. DB_PRODUCTS_FILES)
W klasie PagesAdmin dodać zmienną:

private $aViews=null;


i funkcję:

private function throwPageViews(){
 
$oFFS=FlatFilesSerialize::getInstance();
 
$this->aViews=$oFFS->getData(DB_PAGES_VIEWS);
}


W funkcji listPagesAmin, zaraz pod:

global $lang


wywołać powyższą funkcję:

$this->throwPageViews();


następnie pod:

$aData['sStatusBox']=($aData['iStatus']==1)?' checked="checked"':null;


dodać:

$aData['iViews']=isset($this->aViews[$aData['iPage']])?$this->aViews[$aData['iPage']]:0;


i dalej w

$content.=<tr ...


dodać w odpowiednim miejscu:

<td>'.$aData['iViews'].'<td>


Potem w templacie admina pages.php
odpowiednio rozszerzyć nagłówek tabeli o "Views", nie zapominając o "colspan" przy linijkach z guzikami.
Teraz w plugins.php dodać funkcję:

function savePageViews($iContent){
 
$oFFS=FlatFilesSerialize::getInstance();
 
$aViews=$oFFS->getData(DB_PAGES_VIEWS);
 
$bIsPage=false;
 if(isset(
$aViews)){
  foreach(
$aViews as $iPage=>$iViews){
   if(
$iPage==$iContent){
    
$bIsPage=true;
    
$aViews[$iPage]++;
   }
  }
  if(
$bIsPage==false)
   
$aViews[$iContent]=1;
 }
 else
  
$aViews[$iContent]=1;
 
$oFFS->saveData(DB_PAGES_VIEWS,$aViews);
}


i wywoływać ją w index.php pod

$aData=$oPage->throwPage($iContent);


dodać:

if(!preg_match('/'.$GLOBALS['config']['disable_agents'].'|^$/i',$_SERVER['HTTP_USER_AGENT']))
 
savePageViews($iContent);


i to cała filozofia, jeślo chodzi o licznik odwiedzin stron.
Adekwatnie zrobić dla produktów i Fertig :-)

boboo :-)

boboo

Avatar: boboo

2013-12-20 10:31

A i jeszcze zdefiniować w general.php
$config['disable_agents'] = 'spider|crawler|curl|google|Ezooms|bot|Slurp|yandex|yahoo';
(rozszerzać według potrzeb i pojawiania się nowych "łobuzów")

boboo :-)

polecam

Avatar: polecam

2013-12-20 10:57

Wszystko pięknie ale nic nie rozumiem tej instrukcji:(
"W klasie PagesAdmin dodać zmienną:" tylko gdzie to jest? Identycznie rozumiem resztę:(

boboo

Avatar: boboo

2013-12-20 11:24

wyszukaj plik, w którym występuje zwrot: "class PagesAdmin"
:-)

boboo :-)

polecam

Avatar: polecam

2013-12-20 13:50

Więc tak, odnalazłem plik;) core/pages-admin.php i dokonałem modyfikacji j/w następnie dodałem resztę oraz w templates/admin/pages.php dodałem "Views" oraz zmieniłem "colspan" z 5 na 6 jednak wszystko się przesunęło :( Jak zrobić by było na swoim miejscu?

boboo

Avatar: boboo

2013-12-20 14:16

daj jakiś link, albo obrazek

boboo :-)

boboo

Avatar: boboo

2013-12-20 14:20

OK, chyba znam przyczynę ;-)
przy stronach na liście admina są jeszcze podstrony.
Czyli trzeba jeszcze deczko zmienić w listSubPagesAdmin
pod:

$aData['iDepth'] = $iDepth;


daj:

$aData['iViews']=isset($this->aViews[$aData['iPage']])?$this->aViews[$aData['iPage']]:0;


i potem w to samo miejsce, co w listPagesAdmin daj:

<td>'.$aData['iViews'].'<td>

boboo :-)

boboo

Avatar: boboo

2013-12-21 08:34

i jeszcze jeden błąd z mojej strony:

<td>'.$aData['iViews'].'<td>


powinno być:

<td>'.$aData['iViews'].'</td>


czyli trzeba zamknąć "td", inaczej przeglądarki zamykają to same, a ten następny "td" interpretują jako nowe pole w linii i robi się kasza :-)

boboo :-)

boboo

Avatar: boboo

2013-12-21 15:29

OK,
zrobiłem wstępny "hack" szukajki po cenie.
http://www.kimla.de/qc6test

Popróbuj i sprawdź, czy o to Ci chodzi.

boboo :-)

polecam

Avatar: polecam

2013-12-21 18:16

Boboo dokładnie o to chodziło i działa idealnie, widzę, że dodałeś wyszukiwanie też w produktach, stronach osobno po zaznaczeniu oraz po produktach i stronach łącznie.

Do góry
o nas | kontakt