1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

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

Тема в разделе "Joomla", создана пользователем jaga, 31 окт 2008.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
Статус темы:
Закрыта.
Модераторы: arman29, DMS, Genk0
  1. jaga

    jaga Постоялец

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

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

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

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

    Подскажите плиз люди добрые, может просто я делаю че не так?
     
  2. bumbu

    bumbu

    Регистр.:
    17 окт 2007
    Сообщения:
    233
    Симпатии:
    28
    так как ты сказал что у тебя есть модуль который выводит новость но последнюю то легче будет изменить этот модуль.

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

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

    если не получится то можно файл в студию и помотрим что за модуль, и что нужно менять.
     
    Muzzy нравится это.
  3. jaga

    jaga Постоялец

    Регистр.:
    20 фев 2008
    Сообщения:
    102
    Симпатии:
    24
    В общем, истина где-то рядом, заменил "\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');
        
        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);
        }
    }

    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') );
    $style                 $params->get'style''flash' );
    $moduleclass_sfx    $params->get'moduleclass_sfx' );
    $link_titles        $params->get'link_titles'$mosConfig_link_titles );

    $params->set'intro_only',         );
    $params->set'hide_author',         );
    $params->set'hide_createdate',     );
    $params->set'hide_modifydate',     );
    $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$query0$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 rand0$numrows-);
                
    $row $rows[$flashnum];
                
                
    output_newsflash$row$params$access );
                break;
        }
    }
    ?>
    Пока заюзал вот этот модуль.
    Он выводит случайную строку из текстового файла, который надо предварительно подгрузить к корню. Тэги кажет.
    Но задачи не решает, хочется чтоб юзер мог голосовать-оценивать все, что когда-то рандомально всплывало.

    А вообще, именно стандартный модуль самый зачотный (никаких формирований типа <li> и экономен). Если получиться переделать, чтоб выводил только одну и обяз. случайную - будет мега-круто.
     
  4. t224

    t224 Создатель

    Регистр.:
    29 окт 2008
    Сообщения:
    40
    Симпатии:
    11
    попробуй

    ."\n ORDER BY rand()"
     
    jaga нравится это.
  5. bumbu

    bumbu

    Регистр.:
    17 окт 2007
    Сообщения:
    233
    Симпатии:
    28
    так что получилось просто заменив на "ORDER BY rand()" ??
    если да то я писал что можно попытатся и с лимитом и без.
    тем более что в запросе limit 1 вообще не светится - значит и тут не нужен был : )
     
  6. t224

    t224 Создатель

    Регистр.:
    29 окт 2008
    Сообщения:
    40
    Симпатии:
    11
    можно было просто взглянуть исходники модуль DGM news
    а там rand()
     
  7. jaga

    jaga Постоялец

    Регистр.:
    20 фев 2008
    Сообщения:
    102
    Симпатии:
    24
    Да, замена на ."\n ORDER BY rand()" решила проблему вывода последней новости. С лимитом не, что-то вообще ничего не выводилось...
    Теперь все беспорядочно и лишеного здравого смысла. Алилуя! :yahoo:
     
    Muzzy нравится это.
Статус темы:
Закрыта.