Eigenes Modul auf allen Seiten in der Sidebar

Hallo,

ich möchte gern mein eigenes Modul auf allen Seiten des Shops in der Sidebar integrieren.

Wo muss ich dabei im Backend bei den Einstellungen mein Modul eintragen.

Momentan habe ich unter Module den Eintrag

“sidebar => b2b/topseller”

aber das funktioniert leider nicht.

Kann mir dabei jemand helfen?

Danke.

Ich glaube du verwechselst da etwas, ein Modul überlädt eine PHP Klasse - für mich klingt es als ob du einen neuen Block haben möchtest. Je nachdem wie du das realisieren willst musst du entweder einen Block in die Tabelle oxtplblocks eintragen oder die sidebar.tpl anpassen.

Hallo,

ich meine es so wie ich es schreibe.

Hier ist meine PHP-Datei “topseller.php”


<?php

class Topseller extends Topseller_parent {
	protected $prod;
	 
	public function getByCat($incCat, $cats) {
		$this->getCatId($incCat, $cats);	
		return $this->prod;
	}
	
	protected function getCatId($incCat, $cats) {
		foreach($cats as $cat) {
			if($cat->oxcategories__oxtitle->value == $incCat) {
				$this->getProducts($cat->oxcategories__oxid->value);
			}
			if($cat->getSubCats()) {
				$this->getCatId($incCat, $cat->getSubCats());	
			}
		}		
	}	 
	 
       protected function getProducts($catId) {
		$productsList = &oxNew( "oxarticlelist");
		$productsList->LoadCategoryArticles($catId, null);
		
		$products = $productsList->aList; 
		
		$rand = count($products) < 4 ? count($products) : 4;
		
		$rand_keys = array_rand($products, $rand);
		
		foreach($rand_keys as $key) {
			$products2[$key] = $products[$key];
		}
		
		$this->prod = $products2;	
    }
}
?>

Als Rückgabewert erhalte ich ein Array mit 4 Artikeln. Und dieses Array möchte ich in sidebar.tpl ausgeben.

Mit dem Aufruf:

[{include file="widget/product/boxproducts.tpl" _boxId="topBox" _oBoxProducts=$oView->getByCat("Kites", $oxcmp_categories) _sHeaderIdent="BOX_TOPOFTHESHOP_HEADER"}]

Nun meine Frage wie binde ich die PHP-Datei “topseller.php” in dne Shop ein. Ich dachte es müsste über die Moduleinstellugnen funktionieren?

[QUOTE=aggrosoft;66214]Ich glaube du verwechselst da etwas, ein Modul überlädt eine PHP Klasse - für mich klingt es als ob du einen neuen Block haben möchtest. Je nachdem wie du das realisieren willst musst du entweder einen Block in die Tabelle oxtplblocks eintragen oder die sidebar.tpl anpassen.[/QUOTE]
Dito.

[QUOTE=mipa;66211]Hallo,

ich möchte gern mein eigenes Modul auf allen Seiten des Shops in der Sidebar integrieren.

Wo muss ich dabei im Backend bei den Einstellungen mein Modul eintragen.

Momentan habe ich unter Module den Eintrag

“sidebar => b2b/topseller”

aber das funktioniert leider nicht.

Kann mir dabei jemand helfen?

Danke.[/QUOTE]
das hieße, dass die Klasse sidbar (, welche in Standard-Oxid nicht existiert) mit topseller erweitert wird.

[QUOTE=mipa;66223]Hallo,

ich meine es so wie ich es schreibe.

Hier ist meine PHP-Datei “topseller.php”


<?php

class Topseller extends Topseller_parent {
	protected $prod;
	 
	public function getByCat($incCat, $cats) {
		$this->getCatId($incCat, $cats);	
		return $this->prod;
	}
	
	protected function getCatId($incCat, $cats) {
		foreach($cats as $cat) {
			if($cat->oxcategories__oxtitle->value == $incCat) {
				$this->getProducts($cat->oxcategories__oxid->value);
			}
			if($cat->getSubCats()) {
				$this->getCatId($incCat, $cat->getSubCats());	
			}
		}		
	}	 
	 
       protected function getProducts($catId) {
		$productsList = &oxNew( "oxarticlelist");
		$productsList->LoadCategoryArticles($catId, null);
		
		$products = $productsList->aList; 
		
		$rand = count($products) < 4 ? count($products) : 4;
		
		$rand_keys = array_rand($products, $rand);
		
		foreach($rand_keys as $key) {
			$products2[$key] = $products[$key];
		}
		
		$this->prod = $products2;	
    }
}
?>

Als Rückgabewert erhalte ich ein Array mit 4 Artikeln. Und dieses Array möchte ich in sidebar.tpl ausgeben.

Mit dem Aufruf:

[{include file="widget/product/boxproducts.tpl" _boxId="topBox" _oBoxProducts=$oView->getByCat("Kites", $oxcmp_categories) _sHeaderIdent="BOX_TOPOFTHESHOP_HEADER"}]

Nun meine Frage wie binde ich die PHP-Datei “topseller.php” in dne Shop ein. Ich dachte es müsste über die Moduleinstellugnen funktionieren?[/QUOTE]

  1. Moduleintrag aus Admin->module weg machen.
  2. Die Klasse nicht “extenden”.
  3. In der module/functions.php eine Function schreiben, welche die Klasse instanziert.

function getTopSeller($incCat, $cats){
  //ggf. klasse includen
  $oTop=new Topseller();// oder oxnew nutzen
  return $oTop->getByCat($incCat, $cats);
}

  1. In Smarty function aufrufen.

  [{assign var="aTop" value=$incCat|@getTopSeller:$cats}]

  1. Mit $aTop weiterarbeiten.

  2. Besser das ganze schön als SmartyPlugin umsetzen.

Alternative wäre das ganze als Modul von oxviewconfig zu machen (Achtung, Fehler im code killen dir dabei den Shop wenn du Pech hast) und dann per:

[{$oViewConf-> getByCat(...)}] 

Danke für die Hilfe.
Die Anleitung von MBa mit dem Auslagern der Funktion in module/functions.php hat perfekt funktioniert.

@mba:

ich habe hier ein ähnliches problem. ich möchte alle kategorie top artikel auslesen und in mein menü aufnehmen.

dazu habe ich, wie du hier beschrieben hast eine funktion in meine functions.php aufgenommen:


function getCategoryTopArticle()
{
	$oArtList = oxNew( 'oxarticlelist' );
  $oArtList->loadAktionArticles( 'OXCATOFFER' );
        
  if ( $oArtList->count() ) {
  	return $oArtList;
  }
  return null;
}

diesen möchte ich nun in meinem menü template aufrufen:


[{foreach from=@getCategoryTopArticle() item=actionproduct name=CatArt}]
[{assign var="oCategory" value=$actionproduct->getCategory()}]
...
..
..

dabei passiert leider nichts(de facto baut er meine seite nicht mehr richtig auf). wenn ich via [{debug}] mir die variablen anschaue steht in “oCategory” als wert: "=@getCategoryTopArticle() "

any ideas?

hat sich erledigt. aus mir unerfindlichen gründen gehts auf einmal ^^