Artikelliste -> Falls nur 1 Artikel, gehe direkt zu Mehr-Details-Seite

Hallo an alle!

Wie im Titel beschrieben suche ich folgendes:

Wenn in der jeweiligen Kategorie nur 1 Produkt vorhanden ist, soll er direkt die “Mehr-Details”-Seite anzeigen und nicht das einzelne Produkt in der Liste.

Ich teste schon die ganze Zeit in der list.tpl herum: Folgendes habe ich mir gedacht (funktioniert aber leider nicht, kenne mich zu wenig mit OXID aus…)

[{foreach from=$oView->getArticleList() item=actionproduct name=test_articleList}]
[{php}]
$zaehler++;
[{/php}]
[{/foreach}]

[{php}]
if ($zaehler <= “1”)
{
header(“Location:[{ $actionproduct->getLink() }]”);

}
[{/php}]

Könnte mir jemand auf die Sprünge helfen? Geht es einfacher?

Ich freue mich auf Antworten :slight_smile:

Ungetestet


[{if $oView->getArticleList()|@count ==1 }]
[{*keine Ahnung, ob man mit smarty auf current zugreifen kann, einfach ausprobieren, oder foreach*}]
[{/if}]

oder als Modul.

danke für die extrem schnelle Antwort :wink:

Was meinst du mit current? Kenn mich doch nicht so gut aus …!

[{if $oView->getArticleList()|@count ==1 }]
[{php}]
header(“Location:[{ $actionproduct->getLink() }]”);
[{/php}]
[{/if}]

Wie komme ich nun an den Link des einzelnen Produkts? Ahhhh…Hilfe :confused:

[QUOTE=sslh;36821]danke für die extrem schnelle Antwort :wink:

Was meinst du mit current? Kenn mich doch nicht so gut aus …!
[/quote]
http://php.net/manual/en/function.current.php

Wie komme ich nun an den Link des einzelnen Produkts? Ahhhh…Hilfe :confused:

Entweder*1 mit foreach, current (falls Smarty das kann) oder Smarty-Plugin schreiben, welches das erledigt.
… aber am besten als OXID-Modul, welches die View überlagert und gar nichts im Template ändern.

*1 $oView->getArticleList() gibt ein Array wieder. Entweder dieses Array durchlaufen, oder einfach den ersten Eintrag dieses Arrays nehmen.

also … current scheint er nicht zu kennen! Ich weiß aber nicht wie ich das jetzt mit ner Schleife lösen kann …ich kenn mich mit OXID und Smarty garnicht aus!!

[{if $oView->getArticleList()|@count ==1 }]
[{foreach from=$oView->getArticleList() item=mode}]
[{php}]
header(“Location:”.$mode);
exit;
[{/php}]
[{/foreach}]
[{/if}]

Jetzt zeigt er ne leere weiße Seite an … :confused:

header(“Location:”.$mode->getLink());

Edit: Steht $mode so überhaupt PHP zur Verfügung?

okay …klingt logisch :slight_smile: Problem ist immernoch: links und rechts zeigt er die Navigation an, in der Mitte eine weiße Seite?! Die Header-Anweisung steht in den ersten paar Zeilen von list.tpl …wo ist das Problem?

[{include file=“_header.tpl” tree_path=$oView->getTreePath() titlepagesuffix=$oView->getTitlePageSuffix()}]
[{assign var=“pageNavigation” value=$oView->getPageNavigation()}]

[{if $oView->getArticleList()|@count ==1 }]
[{foreach from=$oView->getArticleList() item=mode}]
[{php}]
header(“Location:”.$mode->getLink());
exit;
[{/php}]
[{/foreach}]
[{/if}]

Wenn man müsste wie das mit diesem OXID-Modul funktioniert und was es damit auf sich hat!!! :stuck_out_tongue:

[{if $oView->getArticleList()|count == 1}]
    [{php}]
        header("Location: ".reset($this->_tpl_vars['oView']->getArticleList()->getArray())->getMainLink());
    [{/php}]
[{/if}]

Oxid Module Tutorials

Ok, als Modul, dafür ohne hässliche Redirects:

./modules/singleArticle4oxcategory.php


<?php
/**
* returns article-link instead category-link, if only one article in category and category don't have subcats
* @author markus.bauer
* @todo check category-tree recursive
*/
class singleArticle4oxCategory extends singleArticle4oxCategory_parent{
	public function getLink( $iLang = null ){
		if(
			$this->getNrOfArticles()==1
			&&
			$this->getHasSubCats()==false
			&&
			!$this->isAdmin()
		){
			$oArtList = oxNew( "oxarticlelist");
			$oArtList->loadCategoryArticles(  $this->sOXID,array());
			return $oArtList->current()->getLink($iLang);
		}else{
			return parent::getLink($iLang);
		}
	}
}

Unter admin->grundeinstellungen->system->module


oxcategory => singleArticle4oxcategory

Edit: isAdmin eingebaut.

ah viel schöner :wink:

DANKE!! Es funktioniert! (zumindest der Redirect)!

Beim Modul passiert garnichts nachdem ich es hochgeladen habe und im Admin-menü eingebunden habe? Muss ich da noch was in die list.tpl schreiben?

Bei mir wird erst [B]gar kein Link[/B] zu dieser Kategorie mehr angezeigt, sonder direkt zum Artikel und dementsprechend kein Redirect.

Lösung hier:
http://www.oxid-esales.com/forum/showthread.php?t=4989

[QUOTE=MBa;36829]Ok, als Modul, dafür ohne hässliche Redirects:

./modules/singleArticle4oxcategory.php


<?php
/**
* returns article-link instead category-link, if only one article in category and category don't have subcats
* @author markus.bauer
* @todo check category-tree recursive
*/
class singleArticle4oxCategory extends singleArticle4oxCategory_parent{
	public function getLink( $iLang = null ){
		if(
			$this->getNrOfArticles()==1
			&&
			$this->getHasSubCats()==false
			&&
			!$this->isAdmin()
		){
			$oArtList = oxNew( "oxarticlelist");
			$oArtList->loadCategoryArticles(  $this->sOXID,array());
			return $oArtList->current()->getLink($iLang);
		}else{
			return parent::getLink($iLang);
		}
	}
}

Unter admin->grundeinstellungen->system->module


oxcategory => singleArticle4oxcategory

Edit: isAdmin eingebaut.[/QUOTE]
Sorry noch neu im Thema Module

class singleArticle4oxCategory ist logisch und einbinden des Moduls
aber die extends anweisung
warum -> singleArticle4oxCategory_parent ?

thx4help

[QUOTE=tombln;81548]Sorry noch neu im Thema Module

class singleArticle4oxCategory ist logisch und einbinden des Moduls
aber die extends anweisung
warum -> singleArticle4oxCategory_parent ?

thx4help[/QUOTE]

Ist Konevention von Oxid.
Oxid bildet Zwischenklassen mit eval().
In diesen Fall:
class singleArticle4oxCategory_parent extends oxcategory{}

Anschließend sieht der Klassenbaum so aus
class oxcategory extends oxi18n{}
class singleArticle4oxCategory_parent extends oxcategory{}
class singleArticle4oxCategory extends singleArticle4oxCategory_parent{}
usw.

Hi,

ich habe das Modul unter 4.7.13 eingebaut - etwas adaptiert…

leider bekomme ich im Exception.log folgende Meldung


oxSystemComponentException-oxException (time: 2014-09-02 14:23:09): [0]: Function 'setInList' does not exist or is not accessible! (singleArticle4oxCategory)

Korrigiere mal das Leerzeichen vor

[B]x[/B]<?php...

Datei: singleArticle4oxCategory.php

habe ich gemacht - ändert aber nichts an der exception… :-((

So sollte es gehen.

Jo, geht. Hab’s getestet: http://485.foxido.de/Wakeboarding/ -> Sets :slight_smile: