Beliebige Objekte im Smarty Template laden

Hallo liebe Gemeinde,

dieses Smarty Plugin ist bei uns relativ beliebt obwohl es so simpel ist, damit lassen sich beliebige Objekte anhand Ihrer OXID laden - also z.B. Kategorien, Artikel, User etc.
Das spart das eine oder andere Modul wenn man nur bestimmte Sachen statisch aus der DB ziehen möchte.

Neue Datei core/smarty/plugins/function.agload.php

<?php
function smarty_function_agload( $params, &$smarty )
{
    $sType = isset( $params['type'] )?$params['type']:null;
    $sOxid  = isset( $params['oxid'] )?$params['oxid']:null;
    $sArtnum  = isset( $params['artnum'] )?$params['artnum']:null;
	$sAssign  = isset( $params['assign'] )?$params['assign']:null;
	
    if ( $sType && ($sOxid || $sArtnum) && $sAssign ) {
        $oObject = oxNew( $sType );
        if(!$sOxid){
            $oDb = oxDb::getDb();
            $sViewName = getViewName('oxarticles');
            $sOxid = $oDb->GetOne("SELECT oxid FROM $sViewName WHERE oxartnum = " . $oDb->quote($sArtnum));
        }
        $blLoaded = $oObject->load( $sOxid );
        
        if ( $blLoaded ) {
            $smarty->assign($sAssign, $oObject);
        }else{
			return "could not load object of type $sType with oxid $sOxid";
		}
    }else{
		return "could not load object of type $sType with oxid $sOxid";
	}

}

Und dann im Template einfach, z.B. für einen beliebigen Artikel:


[{agload oxid="DIEOXIDHIER" type="oxarticle" assign="oArticle"}]
[{$oArticle->oxarticles__oxtitle->value}]

Oder eine Kategorie:


[{agload oxid="DIEOXIDHIER" type="oxcategory" assign="oCategory"}]
[{$oCategory->oxcategories__oxtitle->value}]

Erweitert für Laden nach Artikelnummer:


[{agload artnum="DIEARTIKELNUMMERHIER" type="oxarticle" assign="oArticle"}]
[{$oArticle->oxarticles__oxtitle->value}]

Ist im Moment natürlich noch davon abhängig dass das Objekt nicht gelöscht wird, man könnte es erweitern um Artikel z.B. nach oxartnum oder ähnlichem zu laden.

Jetzt auch mit Artikelnummern laden.

Das Plugin steht unter der WTFPL (http://sam.zoy.org/wtfpl/) - also “You just DO WHAT THE FUCK YOU WANT TO.”

Besten Dank :slight_smile:

Jo, nettes Snippet!

[QUOTE=aggrosoft;59870]
[…] man könnte es erweitern um Artikel z.B. nach oxartnum oder ähnlichem zu laden.
[/QUOTE]
Hallo lieber aggrosoft und Mitleser,

auch ich finde das plugin hervorragend. Zu allem Überfluss brauche ich tatsächlich die Möglichkeit, dass man einen Artikel per [B]oxartnum[/B] laden kann. Ist das schon irgendwo gelöst? Ich schaffe es nicht alleine.

Viele Grüße
Tobias

dickes +1!

Habe es erweitert für laden nach Artikelnummer

Wow, großartig. Vielen lieben Dank aggrosoft :slight_smile:

gr
Tobias

Ich bekomme leider einen 500 Internal Server Error, wenn ich einen der obigen drei Codes in ein Template einbaue (mit richtiger ID oder Artikelnummer). Die Datei habe ich 1:1 von oben kopiert. Ich nutze Oxid CE 4.5.0. Views und Tmp habe ich gelöscht.

Hast du das Smarty plugin überhaupt auf deinen server gelegt? Wenn ja dann würde eine Fehlermeldung helfen etwas dazu zu sagen.

Es ist eine lokale Testinstallation mit ZendServer. Das Plugin habe ich in core/smarty/plugins/ gelegt.
Der Server-Errorlog zeigt keinen Fehler an, im Access-Log steht Folgendes:
127.0.0.1 - - [22/Nov/2011:11:15:15 +0100] “GET / HTTP/1.1” 500 537

Dann ist das error logging deaktiviert - 500 sollte eigentlich immer eine Fehlermeldung ausspucken. Aktivier doch einfach display_errors in der php.ini

So, hier nun der Error-Log:
PHP Fatal error: Smarty error: [in _header.tpl line 206]: syntax error: invalid attribute name: ‘assign"oArticle"’ (Smarty_Compiler.class.php, line 1550) in C:\Program Files (x86)\Zend\Apache2\htdocs\core\smarty\Smarty.class.php on line 1093

Zeile 206 lautet:
[{agload artnum=“330593” type=“oxarticle” assign"oArticle"}]

[QUOTE=Stefan1904;74011]Zeile 206 lautet:
[{agload artnum=“330593” type=“oxarticle” assign"oArticle"}][/QUOTE]

assign=“oArticle” sollte das Problem lösen.

Danke für den Hinweis, jetzt funktioniert es. Das Eingangsposting sollte dann auch entsprechend angepasst werden.

[QUOTE=Stefan1904;74047]Danke für den Hinweis, jetzt funktioniert es. Das Eingangsposting sollte dann auch entsprechend angepasst werden.[/QUOTE]

Stimmt, ist korrigiert.

danke für das plugin!

Aheu,

auch wenn der Thread schon älter ist, so muss ich mich auch für das Plugin bedanken. Wahrscheinlich hat es mir etliche Stunden oder sogar Tage Einarbeitung in die Oxid Struktur erspart und mein Shopprojekt gut vorangebracht.

Vielen Dank!

Kalle

Dankeeeeeeeeee!!!

[QUOTE=cyberkatze;117855]Dankeeeeeeeeee!!![/QUOTE]

Das Teil ist echt ein Evergreen oder :slight_smile:

ist es - habs auch eben wieder erfolgreich einsetzen können!