Willkommen, Gast
Angemeldet bleiben:

THEMA:

mod_dropdownarticles Sortierung ändern 27 Aug 2011 12:59 #31291

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
<?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.
<?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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Aw: mod_dropdownarticles Sortierung ändern 06 Sep 2011 21:38 #31641

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:
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
Man soll das Kind ins Korn werfen solange es noch heiss ist, auch wenn das der eine Tropfen ist, der dem Fass die Krone ins Gesicht schlägt...

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Seite:
  • 1