Joomla! Forum Schweiz wird Teil der D-A-CH Community

Nach vielen Jahren als zentrale Anlaufstelle für Fragen rund um Joomla! in der Schweiz wird das Joomla! Forum Schweiz künftig als Archiv weitergeführt.

Die Joomla!-Communities aus Deutschland, Österreich und der Schweiz arbeiten heute enger denn je zusammen. Deshalb bündeln wir künftig auch den deutschsprachigen Support und Austausch an einem gemeinsamen Ort im Joomla! D-A-CH Forum.

Für neue Fragen, Diskussionen und den Austausch mit der Community nutzt bitte ab sofort:

forum.joomla.de

Das Joomla! Forum Schweiz bleibt weiterhin bestehen und wird als Archiv im Lesemodus erhalten. Die vielen Beiträge, Lösungen und Erfahrungen aus den vergangenen Jahren bleiben damit weiterhin zugänglich und über die Suche auffindbar.

Wir bedanken uns herzlich bei allen Mitgliedern, Moderatoren und Helfern, die das Schweizer Joomla! Forum über viele Jahre mit ihrem Wissen und ihrem Engagement geprägt haben.

Wir sehen uns im Joomla! D-A-CH Forum!

mod_dropdownarticles Sortierung ändern

Mehr
27 Aug. 2011 12:59 #31291 von sapo12
mod_dropdownarticles Sortierung ändern wurde erstellt von sapo12
ich habe das Modul mod_dropdownarticles extensions.joomla.org/extensions/news-di...rticles-listing/7102
installiert und möchte die Sortierung von Title nach Datum ändern.
Habe lange gegoogelt, finde aber nur Fragen, aber keine Antwort.
Dies ist das Original php
Code:
<?php /** * Joomla Drop Down Articles * @package Drop Down Articles * @version 1.5.2 * @subpackage mod_dropdownarticles.php * @revision $Revision: 1.2 $ * @author Andrea Forghieri * @copyright (C) Andrea Forghieri, www.solidsystem.it * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2 */ // no direct access defined('_JEXEC') or die('Restricted access'); global $Itemid, $mainframe; $database = & JFactory :: getDBO(); $user = & JFactory :: getUser(); $moduleclass_sfx = $params->def('moduleclass_sfx', ''); $title_field = $params->def('title_field', '0'); $select_text = $params->def('select_text', 'Go to article...'); $use_local_css = $params->def('use_local_css', '1'); $sections = preg_replace('/[^0-9\,]|\,$/', '', $params->def('sections', '')); $categories = preg_replace('/[^0-9\,]|\,$/', '', $params->def('categories', '')); $opt_max_chars = preg_replace('/[^0-9]/', '', $params->def('opt_max_chars', '')); $select_width = preg_replace('/[^0-9]/', '', $params->def('select_width', '')); $option_width = preg_replace('/[^0-9]/', '', $params->def('option_width', '')); $use_itemid = preg_replace('/[^0-9]/', '', $params->def('use_itemid', '')); $force_itemid = preg_replace('/[^0-9]/', '', $params->def('force_itemid', '')); switch($use_itemid){ case 1 : $thisItemid = "<input type=\"hidden\" name=\"Itemid\" value=\"$Itemid\"/>"; break; case 2: if($force_itemid > 0 ) $thisItemid = "<input type=\"hidden\" name=\"Itemid\" value=\"$force_itemid\"/>"; break; default: $thisItemid = ""; } $contentConfig = & JComponentHelper :: getParams('com_content'); $access = !$contentConfig->get('shownoauth'); $gid = $user->get('gid'); $jnow =& JFactory::getDate(); $now = $jnow->toMySQL(); $nullDate = $database->getNullDate(); $got_JoomFish = file_exists($mainframe->getCfg('absolute_path') . '/administrator/components/com_joomfish/joomfish.php') ? true : false; $query = "SELECT c.id AS id, c.title AS title, c.alias as title_alias FROM #__content AS c INNER JOIN #__categories AS cat ON(c.catid = cat.id) AND (cat.access <= $gid) INNER JOIN #__sections AS sec ON(c.sectionid = sec.id) WHERE c.state = '1' AND ( c.publish_up = " . $database->Quote($nullDate) . " OR c.publish_up <= " . $database->Quote($now) . " ) AND ( c.publish_down = " . $database->Quote($nullDate) . " OR c.publish_down >= " . $database->Quote($now) . " ) AND cat.published = '1' AND sec.published = '1' "; if ($access) { $query .= " AND c.access <= $gid \n"; } if ($sections != '') { $query .= "AND sec.id in ($sections) \n"; } if ($categories != '') { $query .= "AND cat.id in ($categories) \n"; } if (!$got_JoomFish) { if ($title_field == 0) { $query .= "ORDER BY c.title"; } else { $query .= "ORDER BY c.alias"; } } $database->setQuery($query); $rows = $database->loadObjectList(); if ($got_JoomFish) { if ($title_field == 0) { sortArrayObjects($rows, 'title'); } else { sortArrayObjects($rows, 'title_alias'); } } $sel_style = ""; $opt_style = ""; if ($use_local_css) { $sel_style = $select_width != "" ? "style=\"width: " . $select_width . "px\"" : ""; $opt_style = $option_width != "" ? "style=\"width: " . $option_width . "px;\"" : ""; } if ($rows) { ?> <div class="dda<?php echo $moduleclass_sfx?>" > <form method="get" action="index.php" name="ddaForm"> <input type="hidden" name="option" value="com_content"/> <input type="hidden" name="view" value="article"/> <?php echo $thisItemid; ?> <select name="id" onchange="this.form.submit();" class="inputbox" <?php echo "$sel_style" ?>> <?php if ($select_text != "off") { echo "<option $opt_style value=\"\">".htmlspecialchars($select_text)."</option>"; } foreach ($rows as $row) { if ($title_field == '1') { $title = $row->title_alias; } else { $title = $row->title; } $title = $opt_max_chars > 0 && strlen($title) > $opt_max_chars ? substr($title, 0, $opt_max_chars) . '...' : $title; echo "<option $opt_style value=\"" . $row->id .":". $row->title_alias ."\">". htmlspecialchars($title) . "</option>\n"; } ?> </select> </form> </div> <?php } else { ?> <div class="dda<?php echo $moduleclass_sfx?>" > No articles to show. </div> <?php } ?>
ich dachte, ich könnte es selber ersetzen, leider fehlt mir das Wissen dazu. Dies habe ich probiert.
Code:
<?php /** * Joomla Drop Down Articles * @package Drop Down Articles * @version 1.5.2 * @subpackage mod_dropdownarticles.php * @revision $Revision: 1.2 $ * @author Andrea Forghieri * @copyright (C) Andrea Forghieri, www.solidsystem.it * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2 */ // no direct access defined('_JEXEC') or die('Restricted access'); global $Itemid, $mainframe; $database = & JFactory :: getDBO(); $user = & JFactory :: getUser(); $moduleclass_sfx = $params->def('moduleclass_sfx', ''); $title_field = $params->def('title_field', '0'); $select_text = $params->def('select_text', 'Go to article...'); $use_local_css = $params->def('use_local_css', '1'); $sections = preg_replace('/[^0-9\,]|\,$/', '', $params->def('sections', '')); $categories = preg_replace('/[^0-9\,]|\,$/', '', $params->def('categories', '')); $opt_max_chars = preg_replace('/[^0-9]/', '', $params->def('opt_max_chars', '')); $select_width = preg_replace('/[^0-9]/', '', $params->def('select_width', '')); $option_width = preg_replace('/[^0-9]/', '', $params->def('option_width', '')); $use_itemid = preg_replace('/[^0-9]/', '', $params->def('use_itemid', '')); $force_itemid = preg_replace('/[^0-9]/', '', $params->def('force_itemid', '')); switch($use_itemid){ case 1 : $thisItemid = "<input type=\"hidden\" name=\"Itemid\" value=\"$Itemid\"/>"; break; case 2: if($force_itemid > 0 ) $thisItemid = "<input type=\"hidden\" name=\"Itemid\" value=\"$force_itemid\"/>"; break; default: $thisItemid = ""; } $contentConfig = & JComponentHelper :: getParams('com_content'); $access = !$contentConfig->get('shownoauth'); $gid = $user->get('gid'); $jnow =& JFactory::getDate(); $now = $jnow->toMySQL(); $nullDate = $database->getNullDate(); $got_JoomFish = file_exists($mainframe->getCfg('absolute_path') . '/administrator/components/com_joomfish/joomfish.php') ? true : false; $query = "SELECT c.id AS id, c.title AS title, c.alias as title_alias, c.date as date FROM #__content AS c INNER JOIN #__categories AS cat ON(c.catid = cat.id) AND (cat.access <= $gid) INNER JOIN #__sections AS sec ON(c.sectionid = sec.id) WHERE c.state = '1' AND ( c.publish_up = " . $database->Quote($nullDate) . " OR c.publish_up <= " . $database->Quote($now) . " ) AND ( c.publish_down = " . $database->Quote($nullDate) . " OR c.publish_down >= " . $database->Quote($now) . " ) AND cat.published = '1' AND sec.published = '1' "; if ($access) { $query .= " AND c.access <= $gid \n"; } if ($sections != '') { $query .= "AND sec.id in ($sections) \n"; } if ($categories != '') { $query .= "AND cat.id in ($categories) \n"; } if (!$got_JoomFish) { if ($title_field == 0) { $query .= "ORDER BY c.date"; } else { $query .= "ORDER BY c.title"; } } $database->setQuery($query); $rows = $database->loadObjectList(); if ($got_JoomFish) { if ($title_field == 0) { sortArrayObjects($rows, 'date'); } else { sortArrayObjects($rows, 'title'); } } $sel_style = ""; $opt_style = ""; if ($use_local_css) { $sel_style = $select_width != "" ? "style=\"width: " . $select_width . "px\"" : ""; $opt_style = $option_width != "" ? "style=\"width: " . $option_width . "px;\"" : ""; } if ($rows) { ?> <div class="dda<?php echo $moduleclass_sfx?>" > <form method="get" action="index.php" name="ddaForm"> <input type="hidden" name="option" value="com_content"/> <input type="hidden" name="view" value="article"/> <?php echo $thisItemid; ?> <select name="id" onchange="this.form.submit();" class="inputbox" <?php echo "$sel_style" ?>> <?php if ($select_text != "off") { echo "<option $opt_style value=\"\">".htmlspecialchars($select_text)."</option>"; } foreach ($rows as $row) { if ($title_field == '1') { $title = $row->title_alias; } else { $title = $row->title; } $title = $opt_max_chars > 0 && strlen($title) > $opt_max_chars ? substr($title, 0, $opt_max_chars) . '...' : $title; echo "<option $opt_style value=\"" . $row->id .":". $row->title_alias ."\">". htmlspecialchars($title) . "</option>\n"; } ?> </select> </form> </div> <?php } else { ?> <div class="dda<?php echo $moduleclass_sfx?>" > No articles to show. </div> <?php } ?>
Was mach ich falsch?
Danke für die Hilfe
Mehr
06 Sep. 2011 21:38 #31641 von Tribal6
Hi

Ich denke mal, auf dem richtigen Weg bist du. Du willst da aber aus der Content-Tabelle zusätzlich noch die Tabellenspalte 'date' auslesen (c.date as date). Die gibt es aber nicht. Nimm anstelle davon mal 'created', also (c.created as date).

Und bei der (überigens 'deprecated') function sortArrayObjects(), wäre ich mir nicht so sicher, ob die mit dem Datum-Typ zurecht kommt, rsp. so funktioniert, wie sie sollte.

Die braucht's ja eigentlich eh nicht, du kannst ja schon in der Query nach 'neuestes Datum zuerst' sortieren (korrekt wäre 'ORDER BY c.date DESC' = absteigend = aktuellstes zuerst).

Und wenn du die nachträglich geänderten Beiträge auch noch mit berücksichtigen willst (geändert = wieder neu und aktuell), dann kannst du eine Abfrage in die Query einbauen, welches Datum neuer ist: 'created' oder 'modified'. Das ginge dann ungefähr so:
Code:
SELECT c.id AS id, c.title AS title, c.alias as title_alias, CASE WHEN c.modified < c.created THEN c.created ELSE c.modified END as date FROM #__content AS c .......

Ein Limit in der Query (oder im Code) wäre ev. auch nicht schlecht, damit die Liste nicht zu lange wird (z.B. nur die 10 neusten Beiträge).

Cheers
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
Moderatoren: Tribal6RePaoDragonlordChris Hoefligerpascaleadiheutschi.ch
Powered by Kunena Forum

Joomla! Verband Schweiz - Mitglied werden