Funktion für oxuserbaskets_oxtitle?

Hallo liebe community.

Ich will ein Modul schreiben, welches per Knopfdruck prüft ob ein gespeicherter Warenkorb bei registrierten Benutzern 10 Tage alt ist. Falls dies der Fall ist sollte eine eMail verschickt werden (sowas wie ein Reminder).

An sich muss ich eigentlich nur [B]oxuserbaskets[/B] nach der Value für [B]oxtitle[/B] abfragen, ob diese [B]savedbasket[/B] enthällt und dazu noch dem [B]oxtimestamp[/B] 10 Tage dazurechnen. Danach gilt es nur noch Tabellen zu vergleichen.

Meine Frage ist ob eine Funktion existiert, welche Abfragen in diesem Bereich unternimmt.

Ich denke, das findest Du in _updateWishlist().

— nuff said —

Kein Wunder. In dem wenigen Code :o zähle ich 5 Fehler. Setzen 6 :wink:

Bekomme jetzt die Meldung, dass die Funktion [B]init[/B] fehlt oder nicht zugänglich ist.

<?php
class hi_remindermail_oxbasketreservation extends hi_remindermail_oxbasketreservation_parent {
    
    public function init()
    {
        parent::init();
    }
    public function _loadReservations($sBasketId)
    {
        $oReservations = oxNew( 'oxuserbasket' );
        $aWhere = array( 'oxuserbaskets.oxuserid' => $sBasketId, 'oxuserbaskets.oxtitle' => 'savedbasket' );
        return $oReservations;
    }
    public function setClassName( $sClassName )
    {
         $this->_sClass = $sClassName;
    }
    
    public function setFncName( $sFncName )
    {
         $this->_sFnc = $sFncName;
    }
    public function setViewParameters( $sViewParameters )
    {
         $this->_sView = $sViewParameters;
    }
    
}

Ok ich habe meinen Code nun grundsätzlich geändert bzw neu angefangen.

Ich bekomme die Fehlermeldung dass [B]getViewConfig[/B] fehlt bzw. nicht vorhanden ist, obwohl ich folgendes im Code eingebunden habe:

public function __construct()
    {
		$this->db = oxDB::getDb(oxDB::FETCH_MODE_ASSOC);
		$this->oViewConf = $this->getViewConfig();  
    }

Wieso hast Du nicht einfach die Fehler korrigiert? Mit ein wenig Lesen würdest Du Deine Grundlage für Dein Modul hinbekommen. Sieht dann so aus:

Hatte die Seite mit Deinem Code noch im Cache :wink:

Hättest du die Güte das rein zu schreiben oder mir per PM zu schicken?^^

Jetzt habe ich es mit folgendem Code versucht:

<?php
class hi_remindermail_basket extends hi_remindermail_basket_parent {
    
    public function getSavedUser($savedUser)
    {
        $db = oxDB::getDb(oxDB::FETCH_MODE_ASSOC);
        $savedUser = $db->getAll(" SELECT oxuserid FROM oxuserbaskets WHERE oxtitle LIKE 'savedbasket' ");
        return $savedUser;
    }
    public function render()
    {
        parent::render();
        return "hi_remindermail_basket.tpl";
    }
        
}

Und der Block:

<p>Ausgabe:</p><br><br>

[{assign var="savedUser" value="$savedUser->getSavedUser()"}]

Jetzt erscheint nur eine leere Seite.

Ich habe nur die Fehler ausgemerzt, damit es läuft. :wink:

Fehler 1: extends hi_remindermail_basket_parent => extends oxAdminDetails

Fehler 2: DATE_SUB(NOW, INTERVAL 10 DAY) => Das findest Du im Internet, was hier fehlt.

Fehler 3: return $this; => return $savedBasket;

Fehler 4&5: [{$output->getSavedBasket}] => 
[{foreach from=$oView->getSavedBasket()  item=curr_data }]
        [{ $curr_data[0] }]<br />
[{/foreach}]

Ich habe nun einen Code mit dem ich den gespeicherten Warenkorb bekomme, also UserEmail und die dazugehörigen Artikel. Als nächstes muss ich noch die User rausfiltern, wo die Artikel gelöscht wurden, seitdem sie den Warenkorb gespeichert haben.

Jetzt wollte ich wissen, wie man den Code Oxid-konform schreiben kann?

<?php 
class hi_remindermail_basket extends oxAdminDetails{
    
    protected $oDb;
    
    public function render()
    {
        parent::render();
        return "hi_remindermail_basket.tpl";
    }
    
    public function getSavedEmails()
    {
        $oDb = oxDB::getDb();
        $savedEmails = $oDb->getAll("SELECT oxusername, oxid FROM oxuser WHERE oxid IN (SELECT oxuserid FROM oxuserbaskets WHERE oxtitle LIKE 'savedbasket' AND oxtimestamp < DATE_SUB(NOW(), INTERVAL 100 DAY))");

        return $savedEmails;
    }

    public function getBasketId()
    {
        $oDb = oxDB::getDb();
		$basketId = $oDb->getAll("SELECT oxuserid, oxid FROM oxuserbaskets WHERE oxtitle LIKE 'savedbasket' AND oxtimestamp < DATE_SUB(NOW(), INTERVAL 100 DAY)");

        return $basketId;
    }
	
    public function getSavedUserIds()
    {
        $oDb = oxDB::getDb();
    
        $savedUsers = $oDb->getAll("SELECT oxuserid FROM oxuserbaskets WHERE oxtitle LIKE 'savedbasket' AND oxtimestamp < DATE_SUB(NOW(), INTERVAL 100 DAY)");

        return $savedUsers;
    }
    
    public function getArticlesFromUserBasket($user)
    {
        $oDb = oxDB::getDb();
        //$artTitle = $oDb->getAll("SELECT oxtitle FROM oxarticles WHERE oxid IN (SELECT oxartid FROM oxuserbasketitems WHERE oxbasketid IN (SELECT oxid FROM oxuserbaskets WHERE oxtitle LIKE 'savedbasket' AND oxtimestamp < DATE_SUB(NOW(), INTERVAL 100 DAY)))");
        //$artId = $db->getAll("SELECT oxartid FROM oxuserbasketitems WHERE oxbasketid IN (SELECT oxid FROM oxuserbaskets WHERE oxtitle LIKE 'savedbasket' AND oxtimestamp < DATE_SUB(NOW(), INTERVAL 100 DAY))");
//$artVar = $oDb->getAll("SELECT oxshortdesc FROM oxarticles WHERE oxid IN (SELECT oxartid FROM oxuserbasketitems WHERE oxbasketid IN (SELECT oxid FROM oxuserbaskets WHERE oxtitle LIKE 'savedbasket' AND oxtimestamp < DATE_SUB(NOW(), INTERVAL 100 DAY)))");

		$articles = $oDb->getAll("select oxtitle from oxarticles where oxid in (select oaxartid from oxuserbasketitems where oxbasketid in (select oxid from userbaskets where oxtitle like 'savedbasket' and oxuserid = $user and oxtimestamp < DATE_SUB(NOW(), INTERVAL 100 DAY)))");

        
        return $articles;
    }
	
	public function sendEmails() 
	{
		
		
		$emails = $this->getSavedEmails();
		$baskets = $this->getBasketId();

		
		$email_cnt = count($emails);
		echo $email_cnt;
		echo "
<br>";
		
		$oDb = oxDB::getDb();
		
		
		// 1				
		for ($i = 0; $i < $email_cnt; $i++) {
			$basketItems = "";
			
			// 2
			$oxid = $emails[$i][1];
			
			// 3
			foreach($baskets as $basket) { 
				if($basket[0] == $oxid)
				{
					$basketids = "";
					$basketids = $basketids . " <br>Basket ID: " . $basket[1]; // $basket[1];
					
					// 4
					unset($basketItemsArr);
					$basketItemsArr = $oDb->getAll("SELECT oxartid FROM oxuserbasketitems WHERE oxbasketid = '" . $basket[1] . "'");
					foreach($basketItemsArr as $bskt) {
						
						// 5
						$ItemsArr = $oDb->getAll("SELECT oxtitle, oxshortdesc, oxpic1 FROM oxarticles WHERE oxid = '" . $bskt[0] . "'");
					
						$basketItems = $basketItems . " <br>    Artikel: " .  $ItemsArr[0][0]. " <br>    - Kurzbeschreibung: " . $ItemsArr[0][1] . " <br>    - Bild: " . $ItemsArr[0][2] . " <br> ";
						unset($ItemsArr);
					}

					$basketItems = $basketItems . " <br>-------------------------<br><br> ";
				}
			}
			
			echo "
<br>User mail: " . $emails[$i][0] . " <br>User ID: " . $emails[$i][1] . $basketids . " <br>    " . $basketItems;
		
		}

	}
		public function sendEx() 
		{
			echo "Gespeicherte Warenkörbe:";
		}
}

Kann sein das noch Code-Schnipsel vorhanden sind, welche ich für Testzwecke erstellt habe.

Jetzt machste mal was alleine :wink: Steht so gut wie alles hier im Forum.

Könntest du mir nur sagen ob es möglich ist mit dem Eintrag aus OXPIC1 ein Bild zu generieren? Einen Pfad kann ich ja nicht einfach dazu tun, weil die hochgeladenen Bilder in master/relativer-Pfad gespeichert werden.

Gibt es eventuell eine Funktion, welche nur anhand von der OXID o. OXARTNUM o. an weitere Informationen zum Artikel ausgeben kann?

EDIT:

Habe jetzt folgendes versucht (davor natürlich oxpicsgenerated geladen):

 [...] <img src="meine url/out/pictures/master/product" . $ItemsArr[0][2] . "/" . $ItemsArr[0][3] . "\" >";

Das funktioniert mit vielen Bildern, mit vielen anderen jedoch nicht. Mit einem Blick in die oxarticles Tabelle habe ich gesehen dass manche den Wert 0 bei oxpicsgenerated haben. Die dazugehörigen Bilder sind jedoch unter master/product/1 gespeichert.

Dachte der Pfad wäre immer /master/product/[value from oxpicsgenerated]/[name vom Bild] ?

EDIT:

Habe die Funktionen gefunden mit denen die Pfade für die Bilder ausgegeben werden. Beim Debuggen bekomme ich jedoch einen Serverfehler (nach langem laden) oder nichts wenn nicht debuggt wird:


$ItemsArr = $oDb->getAll("SELECT oxtitle, oxshortdesc, oxpic1 FROM oxarticles WHERE oxid = '" . $bskt[0] . "'");

$ImageUrl = $ItemsArr[0][2];
$basketItems = $basketItems . $oViewConf->getImageUrl("$ImageUrl") . "<br>" ;

Wobei $ImageName der Name der Bilddatei ist.