Artikel bereits auf dem Merkzettel ?

Hallo,

ich würde gerne eine Abfrage für die listitem_infogrid bereitstellen, ob ein Artikel aus der Liste bereits auf dem Merkzettel steht. Dies würde ich gerne grafisch darstellen.

Welche Variable oder Funktion ist dafür verantwortlich ?

Danke vorab.

… hat sich erledigt!

habe das ganze per php umgesetzt und im Child Theme verankert.

Dann zeig doch mal :slight_smile:

shirtsfun-shop.de

Anmeldedaten: test | test

Und wie hastes gemacht?

Ich habe im Child Theme die listitem_infogrid.tpl bearbeitet.

Die TPL der CE von 4.8.7 findet sich hier.

Im Block [{block name=“widget_product_listitem_infogrid_tobasket”}].
Bevor der Block zu ende ist, habe ich die Zeilen ( besser wäre sicherlich am Kopf der Datei )

[{if $oxcmp_user}]
[{assign var=userid value=$oxcmp_user->oxuser__oxid->value}]
[{assign var=articleid value=$product->oxarticles__oxid->value}]
[{php}]
if (isset($_GET[‘down’]) && $_GET[‘down’]!=’’ && $_GET[‘down’]==$this->get_template_vars(‘articleid’)) {
$down_article = $_GET[‘down’];
$userid = $this->get_template_vars(‘userid’);
$articleid = $this->get_template_vars(‘articleid’);
$verbindung = mysqli_connect($this->dbHost,$this->dbUser,$this->dbPwd,$this->dbName) or die (“Error”);
$sql=“select oxid from oxuserbaskets where oxuserid = '”.$userid."’ and oxtitle = ‘noticelist’ limit 1";
$row = mysql_query($sql);
$basketid = mysql_fetch_object($row)->oxid;
if ($basketid!=’’) {
$sql=“update oxuserbasketitems set oxartid = ‘’ where oxbasketid = '”.$basketid."’ and oxartid = ‘".$articleid."’";
$row = mysql_query($sql);
}
mysqli_close($verbindung);
}
$ok = false;
include($_SERVER[‘DOCUMENT_ROOT’]."/config.inc.php");
$userid = $this->get_template_vars(‘userid’);
$articleid = $this->get_template_vars(‘articleid’);
$verbindung = mysqli_connect($this->dbHost,$this->dbUser,$this->dbPwd,$this->dbName) or die (“Error”);
$sql=“select oxid from oxuserbaskets where oxuserid = '”.$userid."’ and oxtitle = ‘noticelist’ limit 1";
$row = mysql_query($sql);
$basketid = mysql_fetch_object($row)->oxid;
if ($basketid!=’’) {
$sql=“select oxid from oxuserbasketitems where oxbasketid = '”.$basketid."’ and oxartid = ‘".$articleid."’";
$row = mysql_query($sql);
if (mysql_fetch_object($row)->oxid != ‘’) { $ok = true; }
}
mysqli_close($verbindung);
if ($ok) {
[{/php}]
<a class=“merkbox” id=“linkToNoticeList” style=“background:rgba(85,144,248,0.61);border:1px solid #6E93D6;box-shadow:1px 1px #4D469E;” href=“http://[{php}]echo $_SERVER[‘HTTP_HOST’];[{/php}]/index.php?cl=alist&cnid=[{$oView->getCategoryId()}]&down=[{$product->oxarticles__oxid->value}]&#[{php}]echo $jumper;[{/php}]” alt=“Artikel nicht mehr merken” title=“Artikel nicht mehr merken” rel=“nofollow”>M</a>
[{php}]
} else {
[{/php}]
<a class=“merkbox” id=“linkToNoticeList” href="[{ oxgetseourl ident=$oViewConf->getSelfLink()|cat:“cl=”|cat:$oViewConf->getTopActiveClassName() params=“aid=$product->oxarticles__oxnid->value&anid=$product->oxarticles__oxnid->value&fnc=tonoticelist&am=1”|cat:$oViewConf->getNavUrlParams() }]&#[{php}]echo $jumper;[{/php}]" alt=“Artikel merken” title=“Artikel merken” rel=“nofollow”>M</a>
[{php}]
}
[{/php}]
[{/if}]

Ich hatte danach lediglich mit zu kämpfen, das die Seite nach dem reload immer am Kopf neu angezeigt wurde. Deshalb bediente ich mich von Sprungmarken, welche ich zuerst oberhalb des ersten Formelementes definierte:

[{assign var=id value=$iIndex}]
[{php}]
if ((int)str_replace(‘productList_’,’’,$this->get_template_vars(‘id’))>6) {
$jumpid = ((int)str_replace(‘productList_’,’’,$this->get_template_vars(‘id’)))-6;
$jumper = ‘productList_’.(string) $jumpid;
} else {
$jumper = ‘breadcrumb’;
}
$jm = ‘’.str_replace('productList’,’’,$this->get_template_vars(‘id’));
[{/php}]
<a name="[{$iIndex}]"></a>

Sicherlich gibt es einfachere Möglichkeiten, nur konnte ich anderes nicht umsetzen.
Auch nicht, wie ich anders die SQL Abfragen über das Framework durchführen könnte.

Verbesserungsvorschläge sind immer gerne gesehen :wink:

Puuuh, da haste Dir aber viel Arbeit gemacht. Sowas gibt’s ja schon. Ich habe mir erlaubt, Deine CSS-Formatierung zu benutzen und es etwas umgeschrieben :wink:

habt ihr beide schön gemacht - und thx fürs teilen. :smiley:
@foxido: wo gibts das schon?

Ja hier z.B.: http://485.foxido.de (vorher mit einfacher Markierung, jetzt mit Buttons und dem Design von “shirtsfun” :wink: )

Umgeschrieben? Das ist die Untertreibung des Jahres. :slight_smile:

[QUOTE=foxido.de;149107]Puuuh, da haste Dir aber viel Arbeit gemacht. Sowas gibt’s ja schon. Ich habe mir erlaubt, Deine CSS-Formatierung zu benutzen und es etwas umgeschrieben ;)[/QUOTE]

Kein Problem… gerne doch :slight_smile:
Hat ja auch Spaß gemacht…

Ich habe das ganze mittels Modul gelöst.
Vielleicht hilft es jmd :slight_smile:


class notice_articleBox extends notice_articleBox_parent{
		/**
		 * Abfrage ob Artikel auf Wunschliste steht
		 * 
		 * @param string $id
		 * @return boolean
		 */
		public function isArticleWishlist($id = ""){
			$oWishList = oxNew("Account_Noticelist");
			$oWishListArticle = $oWishList->getNoticeProductList();
			if(!empty($oWishListArticle)){
				foreach($oWishListArticle as $key => $value ){
					if($oWishListArticle[$key]->oxarticles__oxid->value == $id)
						return true;
				}
			}
			return false;
		}
		
		/**
		 * AjaxFunktion zum setzen des Artikels auf die Merkliste
		 * @return / echo True / False
		 */
		public function setArticleToWishlistAjax(){
			$id = oxRegistry::getConfig()->getRequestParameter('id');
			if(!isset($id) || empty($id)){
				echo "false";
				die();
			}else{
				/* 
				 * Setzt den Artikel auf die Merkliste, wenn dieser noch nicht enthalten ist.
				 * Entfernt den Artikel von der Merkliste, wenn dieser bereits vorhanden ist.
				 */
				$oNoticeList = oxNew("oxcmp_utils");
				if($this->isArticleWishlist($id))
					$oNoticeList->toNoticeList($id,0);
				else 
					$oNoticeList->toNoticeList($id,1);
				echo "true";
				die();
			}
		}
	}

Hallo Mishoo.

Na das sieht ja ganz ordentlich aus.
Magst Du nicht das komplette Modul zum download hier anhängen ?