Hallo oxid-Gemeinde
Ich komme, trotz sorgfältiger Suche bei google, in der wiki und hier im Forum, bei der Entwicklung meines einfachen Modules nicht weiter.
Ich möchte damit eine Listendarstellung der neuen Artikel (ähnlich wie auf der Startseite) inkl. Pagination und Ansprechbarkeit über einen Link erreichen.
Dazu habe ich bisher folgendes:
enznewarticles.php
<?php
class enznewarticles extends enznewarticles_parent{
protected $_sThisTemplate = 'page/list/newestarticles.tpl';
public function getNewestArticleList(){
$sQuery = "SELECT * FROM oxv_oxarticles WHERE OXINSERT > '".date("Y-m-d",time()-7*24*60*60)."' AND ".$oBase->getSqlActiveSnippet()." LIMIT 100 ORDER BY OXINSERT DESC";
$aArticleList = oxNew('oxarticlelist');
$aArticleList->selectString($sqQuery);
return $aArticleList->getArray();
}
public function render(){
return parent::render();
}
}
metadata.php
<?php
$aModule = array(
'id' => 'enznewarticles',
'title' => 'NewArticlesPage',
'description' => 'displays the newest Articles (100) on a page width pagination',
'thumbnail' => '',
'version' => '0.1',
'author' => 'EnzephaloN IT-Solutions',
'extend' => array(
'oxUBase' => 'enznewarticles/enznewarticles',
),
);
newestarticles.tpl
[{oxscript add="$('a.js-external').attr('target', '_blank');"}]
[{oxscript include="js/widgets/oxarticlebox.js" priority=10 }]
[{oxscript add="$( '#content' ).oxArticleBox();"}]
[{capture append="oxidBlock_content"}]
[{if $oView->getNewestArticleList()|@count > 0}]
<h1 class="pageHead">[{$oView->getTitle()}]</h1>
<div class="listRefine clear bottomRound">
[{include file="widget/locator/listlocator.tpl" locator=$oView->getPageNavigationLimitedTop() attributes=$oView->getAttributes() listDisplayType=true itemsPerPage=true sort=false }]
</div>
[{* List types: grid|line|infogrid *}]
[{include file="widget/product/list.tpl" type=$oView->getListDisplayType() listId="productList" products=$oView->getNewestArticleList()}]
[{include file="widget/locator/listlocator.tpl" locator=$oView->getPageNavigationLimitedBottom() place="bottom"}]
[{/if}]
[{insert name="oxid_tracker"}]
[{/capture}]
[{include file="layout/page.tpl" sidebar="Left"}]
Aber ich bekomme noch variierende Fehler.
Ist die Vererbung von oxUBase korrekt?
Muß noch etwas in die render-Funktion?
Fehlt noch etwas für die Darstellung der Pagination?
Was muß ich tun, damit die Seite dann aufrufbar wird mit http://www.domain.tld/index.php?cl= newestarticles?
Wäre für Hilfe dankbar!
Johannes
Deine metadata.php stimmt nicht - was du da machst gehört in den Eintrag für files, nicht als extend. OxUBase lässt sich eh nicht per Modul extenden und das möchtest du auch gar nicht. Außerdem muss deine view direkt von oxUBase abgeleitet sein, nicht von der pseudo parent Klasse.
Hallo aggrosoft
Danke für Deine Antwort.
Ich versuche das mal in Code zu übersetzen, bitte korrigieren mich wenn ich da irgendwo falsch liege!
metadata.php
<?php
$aModule = array(
'id' => 'enznewarticles',
'title' => 'NewArticlesPage',
'description' => 'displays the newest Articles (100) on a page width pagination',
'thumbnail' => '',
'version' => '0.1',
'author' => 'EnzephaloN IT-Solutions',
'files' => array(
'enznewarticles' => 'enznewarticles/enznewarticles.php', //ALSO HIER files statt extends!!
),
);
enznewarticles.php
<?php
class enznewarticles{ //ALSO KEIN EXTEND??
protected $_sThisTemplate = 'page/list/newestarticles.tpl';
public function getNewestArticleList(){
$sQuery = "SELECT * FROM oxv_oxarticles WHERE OXINSERT > '".date("Y-m-d",time()-7*24*60*60)."' AND ".$oBase->getSqlActiveSnippet()." LIMIT 100 ORDER BY OXINSERT DESC";
$aArticleList = oxNew('oxarticlelist');
$aArticleList->selectString($sqQuery);
return $aArticleList->getArray();
}
public function render(){
return parent::render();
}
}
Viele Grüße
Johannes
Extend schon, aber keine pseudoklasse__parent sondern direkt oxUBase wie es bei anderen Klassen ist
Hallo zusammen
Danke für Eure Hilfe.
Es scheint noch ein letztes Problem zu geben. Klicke im im Admin auf Aktivieren, so passiert nichts (Seite wird neu geladen, Modul ist inaktiv). Was habe ich noch zu tun / habe ich vergessen?
metadata.php
<<?php
$sMetadataVersion = '1.1';
$aModule = array(
'id' => 'enzarticlenewest',
'title' => 'NewArticlesPage',
'description' => 'displays the newest Articles (100) on a page',
'thumbnail' => '',
'version' => '0.1',
'author' => 'EnzephaloN IT-Solutions',
'files' => array(
'allnewarticles' => 'enzarticlenewest/enzarticlenewest.php',
),
);
enzarticlenewest.php
<?php
class enzarticlenewest extends oxUBase{
protected $_sThisTemplate = 'page/list/newestarticles.tpl';
public function getNewestArticleList(){
$aArticleList = oxNew('oxarticlelist');
$sQuery = "SELECT * FROM oxv_oxarticles WHERE OXINSERT > '".date("Y-m-d",time()-7*24*60*60)."' AND OXACTIVE = 1 AND (OXSTOCKFLAG != 2 OR ( OXSTOCK + OXVARSTOCK ) > 0) LIMIT 100 ORDER BY OXINSERT DESC";
$aArticleList->selectString($sqQuery);
return $aArticleList->getArray();
}
}
Fehler selber gefunden und behoben! Es lag an einem Komma in der metadata.php!
metadata.php
<?php
$sMetadataVersion = '1.1';
$aModule = array(
'id' => 'enzarticlenewest',
'title' => 'NewArticlesPage',
'description' => 'displays the newest Articles (100) on a page',
'thumbnail' => '',
'version' => '0.1',
'author' => 'EnzephaloN IT-Solutions',
'files' => array(
'allnewarticles' => 'enzarticlenewest/enzarticlenewest.php //hier war ein Komma zuviel
'),
);
Nur funktioniert es leider immer noch nicht. Im Log steht: "EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND " obwohl ja eingebunden…
Wenn der Fehler noch besteht, könnte es vielleicht daran liegen:
[B]$sQuery[/B] = "SELECT * FROM oxv_oxarticles WHERE OXINSERT > '".date("Y-m-d",time()-7*24*60*60)."' AND OXACTIVE = 1 AND (OXSTOCKFLAG != 2 OR ( OXSTOCK + OXVARSTOCK ) > 0) LIMIT 100 ORDER BY OXINSERT DESC";
$aArticleList->selectString([B]$sqQuery[/B]);
@EnzephaloN
nimm den Kommenar (’//hier war ein Komma zuviel’) da raus und das abschließende Hochkomma muss direkt hinter …php’ stehen.