Самая бесящая случайная новость

Статус
В этой теме нельзя размещать новые ответы.

jaga

Постоялец
Регистрация
20 Фев 2008
Сообщения
102
Реакции
24
В общем задача следующая:
Есть тысяча и одна афоризма всяких великих чуваков.
Это один из разделов сайта, и как-бы даже подраздел...

Есть центральное место в башке сайта, на которых предполагается вывод этой одной случайной афоризмочки.
Тупо цитата в центре, а внизу направо автор.
Она не должна вялятся ссылкой, желающий сам найдет раздел, увидит название (вот там оно уже ссылка) и может прокомментировать его, отзвездить и всяко-разно поиздеваться, но должна быть поддержка тэгов h1, h2...)))

Так вот, я нашел 15-ть модулей разных лет и направленностей, которые отвечают за вывод новостей.
Половина сразу полетела на фиг, потому-как там не было рэндом режима.
Другая половина, отлетела ввиду того, не было возможности выводить ОДНУ ЕДИНСТВЕННУЮ НОВОСТЬ (или 5-ть или вообще с ошибками).

Как-бы изначальный модуль случайная новость в Joomla 1.0 выводит одну новость, но он выводит только самую последнюю, а не как заявлено в заголовке, что чрезвычайно бесит...
Вроде такая элементарная вещь, как вывод одной единственной рандомальной новости, с тупым заголовком и подписью автора - вообще нигде нормально не реализована.

Подскажите плиз люди добрые, может просто я делаю че не так?
 
так как ты сказал что у тебя есть модуль который выводит новость но последнюю то легче будет изменить этот модуль.

если я не ошибаюсь то всё должно пройти гладко: открываем пхп файл модуля (модули находятся в папке modules в корне сайта) и смотрим что там у нас есть. там должны быть запросы к базе, и среди всего этого должно всетится "ORDER BY чтото LIMIT 1" или может быть без лимит 1, но скорее всего есть, и вот вместо етого ставим "ORDER BY RAND() LIMIT 1".

если в файле больше запросов то можно или вставить во все, или в последний, или попытатся с разыми комбинациями(это если ты не знаеш пхп+муксл, но так как задал этот вопрос то скорее всего не знаеш).

если не получится то можно файл в студию и помотрим что за модуль, и что нужно менять.
 
В общем, истина где-то рядом, заменил "\n ORDER BY a.ordering" на "ORDER BY RAND() LIMIT 1" - вообще тишина.
Код стандартного модуля mod_newsflash
PHP:
<?php
/**
* @version $Id: mod_newsflash.php 5069 2006-09-15 16:16:55Z friesengeist $
* @package Joomla
* @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// no direct access
defined( '_VALID_MOS' ) or die( 'Доступ запрещен' );

require_once( $mainframe->getPath( 'front_html', 'com_content') );

if (!defined( '_JOS_NEWSFLASH_MODULE' )) {
	/** ensure that functions are declared only once */
	define( '_JOS_NEWSFLASH_MODULE', 1 );
	
	function output_newsflash( &$row, &$params, &$access ) {	
		global $mainframe;
		
		$row->text 		= $row->introtext;
		$row->groups 	= '';
		$row->readmore 	= (trim( $row->fulltext ) != '');		
		$row->metadesc 	= '';
		$row->metakey 	= '';
		$row->access 	= '';
		$row->created 	= '';
		$row->modified 	= '';	

		HTML_content::show( $row, $params, $access, 0 );
	}
}

global $my, $mosConfig_shownoauth, $mosConfig_offset, $mosConfig_link_titles, $acl;

// Disable edit ability icon
$access = new stdClass();
$access->canEdit 	= 0;
$access->canEditOwn = 0;
$access->canPublish = 0;

$now 				= _CURRENT_SERVER_TIME;
$noauth 			= !$mainframe->getCfg( 'shownoauth' );
$nullDate 			= $database->getNullDate();

$catid 				= intval( $params->get( 'catid' ) );
$items 				= intval( $params->get( 'items', 0 ) );
$style 				= $params->get( 'style', 'flash' );
$moduleclass_sfx    = $params->get( 'moduleclass_sfx' );
$link_titles		= $params->get( 'link_titles', $mosConfig_link_titles );

$params->set( 'intro_only', 		1 );
$params->set( 'hide_author', 		1 );
$params->set( 'hide_createdate', 	0 );
$params->set( 'hide_modifydate', 	1 );
$params->set( 'link_titles', 		$link_titles );

// query to determine article count
$query = "SELECT a.id, a.introtext, a.fulltext , a.images, a.attribs, a.title, a.state"
."\n FROM #__content AS a"
."\n INNER JOIN #__categories AS cc ON cc.id = a.catid"
."\n INNER JOIN #__sections AS s ON s.id = a.sectionid"
."\n WHERE a.state = 1"
. ( $noauth ? "\n AND a.access <= " . (int) $my->gid . " AND cc.access <= " . (int) $my->gid . " AND s.access <= " . (int) $my->gid : '' )
."\n AND (a.publish_up = " . $database->Quote( $nullDate ) . " OR a.publish_up <= " . $database->Quote( $now ) . " ) "
."\n AND (a.publish_down = " . $database->Quote( $nullDate ) . " OR a.publish_down >= " . $database->Quote( $now ) . " )"
."\n AND a.catid = " . (int) $catid
."\n AND cc.published = 1"
."\n AND s.published = 1"
."\n ORDER BY a.ordering"
;
$database->setQuery( $query, 0, $items );
$rows = $database->loadObjectList();

$numrows = count( $rows );

// check if any results returned
if ( $numrows ) {
	switch ($style) {
		case 'horiz':
			echo '<table class="moduletable' . $moduleclass_sfx .'">';
			echo '<tr>';
			foreach ($rows as $row) {
				echo '<td>';			
				output_newsflash( $row, $params, $access );			
				echo '</td>';
			}
			echo '</tr></table>';
			break;
	
		case 'vert':
			foreach ($rows as $row) {
				output_newsflash( $row, $params, $access );
			}
			break;
	
		case 'flash':
		default:
			srand ((double) microtime() * 1000000);
			$flashnum = rand( 0, $numrows-1 );
			$row = $rows[$flashnum];
			
			output_newsflash( $row, $params, $access );
			break;
	}
}
?>

Пока заюзал вот этот Для просмотра ссылки Войди или Зарегистрируйся.
Он выводит случайную строку из текстового файла, который надо предварительно подгрузить к корню. Тэги кажет.
Но задачи не решает, хочется чтоб юзер мог голосовать-оценивать все, что когда-то рандомально всплывало.

А вообще, именно стандартный модуль самый зачотный (никаких формирований типа <li> и экономен). Если получиться переделать, чтоб выводил только одну и обяз. случайную - будет мега-круто.
 
так что получилось просто заменив на "ORDER BY rand()" ??
если да то я писал что можно попытатся и с лимитом и без.
тем более что в запросе limit 1 вообще не светится - значит и тут не нужен был : )
 
можно было просто взглянуть исходники модуль DGM news
а там rand()
 
так что получилось просто заменив на "ORDER BY rand()" ??
если да то я писал что можно попытатся и с лимитом и без.
тем более что в запросе limit 1 вообще не светится - значит и тут не нужен был : )
Да, замена на ."\n ORDER BY rand()" решила проблему вывода последней новости. С лимитом не, что-то вообще ничего не выводилось...
Теперь все беспорядочно и лишеного здравого смысла. Алилуя! :yahoo:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху