Generelle Frage Modul-Programmierung

Ich habe ein neues Modul erstellt und die Einbindung ins Template funktioniert auch.

Template “productmain.tpl”:

[{assign var="ShowSymbols" value=$oViewConf->getSymbols()}]
            Ausgabe Symbole: [{$ShowSymbols}]

Modul:

<?php
 
class displaySymbols_main extends displaySymbols_main_parent {
    
    public function getSymbols() {
        //SQL erstellen
        $sPc = "select count(*) from oxarticles where oxactive = '1'";
        //DB verbindung
        $oDb = oxDb::getDb()->getOne($sPc);
        //wert zurueckgeben
        return $oDb;
    }
}

(abgewandelt von qrella.com/oxid-modul-erstellen/)

Nun meine Frage… Worauf kann ich innerhalb des Moduls zugreifen? Welche Klassen und Funktionen sind dort nutzbar?
Ich möchte im Modul eine Ausgabe neuer Datenbanken-Spalten zusammenführen (mit Lazy Loading innerhalb des Templates ist das zu frickelig). Wie komme ich dort ran innerhalb des Moduls?

Oder einfacher… Wie bekomme ich am einfachsten den Artikelnamen ausgegeben?

<?php
 
class displaySymbols_main extends displaySymbols_main_parent {
    
    public function getSymbols() {
		return $this->oxarticles__oxtitle->value;
    }
}

Das funktioniert nicht :confused:

da fehlen etwa 99% vom Modul, es muss irgendwie wissen von welchem Artikel du den Titel haben willst. Und dann muss es den Artikel finden und laden.
Und $this referenziert in dem Fall auf oxViewConfig und oxViewConfig hat kein oxarticles__oxtitle Feld, weswegen es auch nicht funktioniert.

So wie ich das verstanden habe: Mit dem ersten Code count(*) zählst du nur und gibst mit getOne kein Objekt aus. Am einfachsten in der metadata oxarticles mit displaySymbols_main extenden. Dann sollte mit folgendem eine Ausgabe erfolgen.

[{assign var="ShowSymbols" value=[B]$oView->getSymbols()[/B]}] 

Danke für die Antworten!

[QUOTE=adamweber;156003]Am einfachsten in der metadata oxarticles mit displaySymbols_main extenden. Dann sollte mit folgendem eine Ausgabe erfolgen.

[{assign var="ShowSymbols" value=[B]$oView->getSymbols()[/B]}] 

[/QUOTE]

Es sieht nun so aus:

[B]metadata.php[/B]

<?php
 
/**
* Metadata version
*/
$sMetadataVersion = '1.1';
/**
* Module information
*/
$aModule = array(
    'id'           => 'displaySymbols',
    'title'        => 'Produktsymbole',
    'description'  => 'Ermöglicht es, Produkten spezielle Symbole zuzuordnen.',
    'thumbnail'    => 'mig.jpg',
    'version'      => '0.1',
    'author'       => 'xxxxxxx',
    'url'          => 'http://www.xxxxx.de',
    'email'        => '[email protected]',
    'extend'       => array(
        'oxarticles'  => 'displaySymbols/displaysymbols_main',
    ),
);

[B]productmain.tpl[/B]

[{assign var="ShowSymbols" value=$oView->getSymbols()}]
            Ausgabe Symbole: [{$ShowSymbols}]

[B]displaysymbols_main.php[/B]

<?php
 
class displaySymbols_main extends displaySymbols_main_parent {
    
    public function getSymbols() {
		return $this->oxarticles__oxtitle->value; 
    }
}

Das funktioniert leider nicht, ich komme beim Anschauen der Artikelseite wieder auf die Startseite. Modul habe ich deaktiviert und erneut aktiviert, TMP gelöscht.

Inhalt der [B]EXCEPTION_LOG.txt[/B]

oxSystemComponentException-oxException (time: 2015-02-10 18:10:34): [0]: Function 'getSymbols' does not exist or is not accessible! (oePayPalOxwArticleDetails)
 
 Stack Trace: #0 /www/htdocs/w012999f/www_beta/tmp/smarty/516f68add1dac66e0ce8134e21ae2e4d^%%5E^5E9^5E9B9D5B%%productmain.tpl.php(520): oxSuperCfg->__call('getSymbols', Array)
#1 /www/htdocs/w012999f/www_beta/tmp/smarty/516f68add1dac66e0ce8134e21ae2e4d^%%5E^5E9^5E9B9D5B%%productmain.tpl.php(520): oePayPalOxwArticleDetails->getSymbols()
#2 /www/htdocs/w012999f/www_beta/core/smarty/Smarty.class.php(1869): include('/www/htdocs/w01...')
#3 /www/htdocs/w012999f/www_beta/tmp/smarty/516f68add1dac66e0ce8134e21ae2e4d^%%A5^A59^A595DDB8%%fullproductinfo.tpl.php(7): Smarty->_smarty_include(Array)
#4 /www/htdocs/w012999f/www_beta/core/smarty/Smarty.class.php(1869): include('/www/htdocs/w01...')
#5 /www/htdocs/w012999f/www_beta/tmp/smarty/516f68add1dac66e0ce8134e21ae2e4d^%%79^790^7907FF72%%details.tpl.php(64): Smarty->_smarty_include(Array)
#6 /www/htdocs/w012999f/www_beta/core/smarty/Smarty.class.php(1263): include('/www/htdocs/w01...')
#7 /www/htdocs/w012999f/www_beta/core/oxshopcontrol.php(508): Smarty->fetch('widget/product/...', 'ox|0|0|0|0')
#8 /www/htdocs/w012999f/www_beta/core/oxshopcontrol.php(353): oxShopControl->_render(Object(oePayPalOxwArticleDetails))
#9 /www/htdocs/w012999f/www_beta/core/oxshopcontrol.php(126): oxShopControl->_process('oxwarticledetai...', NULL, Array, Array)
#10 /www/htdocs/w012999f/www_beta/core/oxwidgetcontrol.php(73): oxShopControl->start('oxwarticledetai...', NULL, Array, Array)
#11 /www/htdocs/w012999f/www_beta/core/smarty/plugins/function.oxid_include_widget.php(55): oxWidgetControl->start('oxwarticledetai...', NULL, Array, Array)
#12 /www/htdocs/w012999f/www_beta/tmp/smarty/516f68add1dac66e0ce8134e21ae2e4d^%%08^08A^08ABD53A%%details.tpl.php(10): smarty_function_oxid_include_widget(Array, Object(Smarty))
#13 /www/htdocs/w012999f/www_beta/core/smarty/Smarty.class.php(1263): include('/www/htdocs/w01...')
#14 /www/htdocs/w012999f/www_beta/core/oxshopcontrol.php(508): Smarty->fetch('page/details/de...', 'ox|0|0|0|0|1050...')
#15 /www/htdocs/w012999f/www_beta/core/oxshopcontrol.php(353): oxShopControl->_render(Object(Details))
#16 /www/htdocs/w012999f/www_beta/modules/_d3modcfg/modules/controllers/d3_oxshopcontrol_modcfg_extension.php(146): oxShopControl->_process('details', NULL, NULL, NULL)
#17 /www/htdocs/w012999f/www_beta/core/oxshopcontrol.php(126): d3_oxshopcontrol_modcfg_extension->_process('details', NULL, NULL, NULL)
#18 /www/htdocs/w012999f/www_beta/modules/_d3modcfg/modules/controllers/d3_oxshopcontrol_modcfg_extension.php(61): oxShopControl->start(NULL, NULL, NULL, NULL)
#19 /www/htdocs/w012999f/www_beta/core/oxid.php(40): d3_oxshopcontrol_modcfg_extension->start()
#20 /www/htdocs/w012999f/www_beta/index.php(26): Oxid::run()
#21 /www/htdocs/w012999f/www_beta/oxseo.php(44): require('/www/htdocs/w01...')
#22 {main}

 Faulty component --> 
---------------------------------------------

oxarticles

die klasse heißt: oxarticle

$oView->getSymbols()

hier rufst du eine methode des aktuellen view (z. b. details) auf, du willst aber die methode, und diese hängt am artikel objekt.

beispiel: $oDetailsProduct->getSymbols() (beispiel auf detailseite)

[QUOTE=ProudCommerce;156015]die klasse heißt: oxarticle

hier rufst du eine methode des aktuellen view (z. b. details) auf, du willst aber die methode, und diese hängt am artikel objekt.

beispiel: $oDetailsProduct->getSymbols() (beispiel auf detailseite)[/QUOTE]

Super, danke - klappt! Das hilft mir auch, die Logik zu verstehen :slight_smile:

[{assign var="ShowSymbols" value=$oView->getSymbols()}]

Wie kann ich dort am einfachsten eine Variable an das Modul übergeben und im Modul auswerten?

[{assign var="ShowSymbols" value=$oView->getSymbols([b]$variable[/b])}]

[QUOTE=vanilla thunder;156055]

[{assign var="ShowSymbols" value=$oView->getSymbols([b]$variable[/b])}]

[/QUOTE]
Okay, also wie “normal”, danke!