Kategorieansicht (alist.tpl): Variablen und Funktionen aus eigenem Module aufrufen

Guten Tag,

also ich habe ein Module zur Erweiterung unserer Artikelinformationen geschrieben, dieses funktioniert im Backend auch wunderbar, allerdings ist es mir ein Rätzel, wie ich auch das Modul von einem Standard Template (unserer Theme oder azure) zugreifen kann.

<?php
class WmdkIsotope_Articlebox extends oxwArticleBox_parent {
	
	public function wmdk_isotopeGetLayoutClass() {
				
		return 'wmdk-isotope-layout-1';
	}
	
}

Kann mir jemand weiterhelfen!?

Vielen Dank und schönes Wochenende,
Daniel

Hallo Daniel,

lies Dir mal das hier durch bitte:
http://www.marco-steinhaeuser.de/how-to-write-a-module-for-oxid-eshop-display-you-will-save-x-percent-on-the-product-details-page.html

Gruß

Hallo Marco,

danke für deinen Verweis bzw. für dein Tutorial. Am Samstag bin ich zufälligerweise selbst auf deinen Post gestossen.

Wie du im Folgenden sehen kannst, habe ich auch einiges angepasst, wie du es in deinem Tutorial geschrieben hast. Des Weiteren habe ich das Paypal-Modul zu Hilfe genommen.
Aber leider funktioniert der Aufruf der Funktion wmdk_isotopeGetLayoutClass (siehe unten) immer noch nicht!?

Datei: modules/wmdk/wmdkisotope/metadata.php

<?php
/**
 * WMDK :: jQuery Isotope by isotope.metafizzy.co
 *
 * Version:    1.0
 * Author:     Daniel Kussin <[email protected]>
 * Author URI: http://www.kussin.de
 */

/**
 * Metadata version
 */
$sMetadataVersion = '1.1';
 
/**
 * Module information
 */
$aModule = array(
    'id'           => 'wmdkisotope',
    'title'        => 'WMDK :: jQuery Isotope by isotope.metafizzy.co',
    'description'  => 'Adds a new field to oxarticle objects',
    'thumbnail'    => 'wmdkisotope.jpg',
    'version'      => '1.0',
    'author'       => 'Daniel Kussin',
    'url'          => 'http://www.kussin.de',
    'email'        => '[email protected]',
    'extend'       => array(
        'oxwarticlebox'	=> 'wmdk/wmdkisotope/components/widgets/wmdkisotopeoxwarticlebox'
    ),
    'files' => array(
        // Admin
        'wmdkIsotopeArticle_Isotope' => 'wmdk/wmdkisotope/controllers/admin/wmdkisotope_isotope.php'
	),
    'templates' => array(
        // Admin
        'wmdkisotope.tpl'   => 'wmdk/wmdkisotope/views/tpl/wmdkisotope.tpl'
    )
);

Datei: modules/wmdk/wmdkisotope/controllers/admin/wmdkisotope_isotope.php

<?php
class wmdkIsotopeArticle_Isotope extends oxAdminDetails {
	// Funktioniert alles inkl. Menü-XML und Template
}

Z.Zt. bin ich mir noch unsicher bei der Bennenung der Klasse und dem erweitern (extend) der OXID Klasse “oxwarticlebox” (siehe oben).

Datei: modules/wmdk/wmdkisotope/components/widgets/wmdkisotopearticlebox.php

<?php
class wmdkIsotopeoxwArticleBox extends wmdkIsotopeoxwArticleBox_parent {

	/**
	 *	getLayoutClass()
	 */
	public function wmdk_isotopeGetLayoutClass() {
		
		// Demo-Ausgabe
		return 'wmdk-isotope-layout-1';
	}
}

In der Template-Datei unseres Themes möchte ich jetzt meine neue Funktion aufrufen (siehe Zeile 22).

Datei: application/views/wh1/tpl/widget/product/listitem_infogrid.tpl
[{block name="widget_product_listitem_infogrid"}]
    [{assign var="product"              value=$oView->getProduct()      }]
    [{assign var="owishid"              value=$oView->getWishId()          }]
    [{assign var="toBasketFunction"     value=$oView->getToBasketFunction()}]
    [{assign var="recommid"             value=$oView->getRecommId()        }]
    [{assign var="showMainLink"         value=$oView->getShowMainLink()    }]
    [{assign var="blDisableToCart"      value=$oView->getDisableToCart()   }]
    [{assign var="iIndex"               value=$oView->getIndex()          }]
    [{assign var="altproduct"           value=$oView->getAltProduct()      }]

    [{if $showMainLink}]
        [{assign var='_productLink' value=$product->getMainLink()}]
    [{else}]
        [{assign var='_productLink' value=$product->getLink()}]
    [{/if}]
    [{assign var="aVariantSelections" value=$product->getVariantSelections(null,null,1)}]
    [{assign var="blShowToBasket" value=true}] [{* tobasket or more info ? *}]
    [{if $blDisableToCart || $product->isNotBuyable()||($aVariantSelections&&$aVariantSelections.selections)||$product->hasMdVariants()||($oViewConf->showSelectListsInList() && $product->getSelections(1))||$product->getVariants()}]
        [{assign var="blShowToBasket" value=false}]
    [{/if}]

	<div class="[{$oView->wmdk_isotopeGetLayoutClass()}]">
	
		<!-- ... -->
		
	</div>
	
[{/block}]

[{oxscript widget=$oView->getClassName()}]

Der Aufruf [{$oView->wmdk_isotopeGetLayoutClass()}] führt allerdings zur folgenden Exception (“Function ‘wmdk_isotopeGetLayoutClass’ does not exist or is not accessible! (oxwArticleBox)”), aber wieso?

Function 'wmdk_isotopeGetLayoutClass' does not exist or is not accessible! (oxwArticleBox)

#0 /oxijpmsm/www.oxid-devel.de/tmp/smarty/9c139a91df3b81517bc94d37e7011313^%%CB^CB6^CB6C1C15%%listitem_infogrid.tpl.php(25): oxSuperCfg->__call('wmdk_isotopeGet...', Array)
#1 /oxijpmsm/www.oxid-devel.de/tmp/smarty/9c139a91df3b81517bc94d37e7011313^%%CB^CB6^CB6C1C15%%listitem_infogrid.tpl.php(25): oxwArticleBox->wmdk_isotopeGetLayoutClass()
#2 /oxijpmsm/www.oxid-devel.de/core/smarty/Smarty.class.php(1263): include('/oxijpmsm/www.o...')
#3 /oxijpmsm/www.oxid-devel.de/core/oxshopcontrol.php(494): Smarty->fetch('widget/product/...', 'ox|0|0|0|0')
#4 /oxijpmsm/www.oxid-devel.de/core/oxshopcontrol.php(342): oxShopControl->_render(Object(oxwArticleBox))
#5 /oxijpmsm/www.oxid-devel.de/core/oxshopcontrol.php(115): oxShopControl->_process('oxwarticlebox', NULL, Array, Array)
#6 /oxijpmsm/www.oxid-devel.de/core/oxwidgetcontrol.php(66): oxShopControl->start('oxwarticlebox', NULL, Array, Array)
#7 /oxijpmsm/www.oxid-devel.de/core/smarty/plugins/function.oxid_include_widget.php(47): oxWidgetControl->start('oxwarticlebox', NULL, Array, Array)
#8 /oxijpmsm/www.oxid-devel.de/tmp/smarty/9c139a91df3b81517bc94d37e7011313^%%FC^FCA^FCA347E9%%list.tpl.php(49): smarty_function_oxid_include_widget(Array, Object(Smarty))
#9 /oxijpmsm/www.oxid-devel.de/core/smarty/Smarty.class.php(1869): include('/oxijpmsm/www.o...')
#10 /oxijpmsm/www.oxid-devel.de/tmp/smarty/9c139a91df3b81517bc94d37e7011313^%%F0^F0F^F0F92504%%list.tpl.php(187): Smarty->_smarty_include(Array)
#11 /oxijpmsm/www.oxid-devel.de/core/smarty/Smarty.class.php(1263): include('/oxijpmsm/www.o...')
#12 /oxijpmsm/www.oxid-devel.de/core/oxshopcontrol.php(494): Smarty->fetch('page/list/list....', '451f19b4add457a...')
#13 /oxijpmsm/www.oxid-devel.de/core/oxshopcontrol.php(342): oxShopControl->_render(Object(aList))
#14 /oxijpmsm/www.oxid-devel.de/core/oxshopcontrol.php(115): oxShopControl->_process('alist', NULL, NULL, NULL)
#15 /oxijpmsm/www.oxid-devel.de/core/oxid.php(30): oxShopControl->start()
#16 /oxijpmsm/www.oxid-devel.de/index.php(19): Oxid::run()
#17 /oxijpmsm/www.oxid-devel.de/oxseo.php(36): require('/oxijpmsm/www.o...')
#18 {main};

Ich hoffe, dass du oder irgendwer anderes sagen kann, was ich falsch mache.

Zwischendurch war ich sagor unsicher, z.T. bin ich es noch, ob die “oxwArticleBox” überhaupt überladen wird. - Wenn ich allerdings zum Test, meine Funktion in die Core-oxwArticleBox einbaue, dann funktioniert mein Funktionsaufruf ohne Exception!?

Vielen Dank,
Daniel

Nein wird nicht überladen.

Function ‘wmdk_isotopeGetLayoutClass’ does not exist or is not accessible! (oxwArticleBox)
Hier müsste deine Klasse stehen. Schau mal unter Module/Installierte Shop-Module. Evtl. in oxconfig oxvarname=‘aDisabledModules’ löschen, /tmp leeren.

Frank rettet mich wieder :smiley:

Hallo Frank,

danke für deine Hilfe.

Ok, aber wenn ich meine Klasse über die config.inc.php integriere, dann kriege ich einen Re-Deklarationsfehler, also muss die Klasse doch irgendwo geladen werden.

Habe ich gemacht (siehe folgenden Screenshot), aber hier scheint alles zu stimmen!?

Wo kann ich das machen? Datenbank? - Den TMP Ordner lösche ich laufend.

Gruß Daniel

Hallo Frank

[QUOTE=leofonic;146739]Evtl. in oxconfig oxvarname=‘aDisabledModules’ löschen, /tmp leeren.[/QUOTE]

Also ich habe den aDisabledModules-Wert einmal aus der oxconfig Tabelle gelöscht, aber der Fehler bleibt unverändert bestehen.

Gruß Daniel

Probiers mal so: s. Anhang.

Sollte gehen…:wink:

Das ist nicht die Seite “Installierte Shop-Module” ;). Lad mal das Modul gezippt hier hoch. Schaut soweit alles richtig aus und sollte so funktionieren.

Hallo zusammen,

vielen Dank für die Unterstützung.

Also durch eure Tipps konnte ich mein Problem beheben, den Fehler genau konnte ich nicht ausmachen, aber ich vermute, dass es die Mischung war!

Die finale Lösung habe ich angehängt.

Schönen Abend,
Daniel

Stimmt, die Buchstabenmischung war’s und die direkte Änderung im Template war unschön. Am besten immer alles klein schreiben und, wenn es geht, Blocks überschreiben. So kannst das Modul rückstandslos wieder abschalten. :wink: