CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » [решено]Помогите исправить Блок случайных новостей
Официальный форум Eleanor CMS » Для вебмастеров и владельцев сайтов » Комната программистов
Страницы: 1, 2
Loader
Собственно, скачал и установил этот блок, в результате у меня такое впечатление сто он неправильно ищет картинку,
здесь: http://pda-kino.net.ru/ можно посмотреть.
А именно вместо того чтобы брать постер фильма он берёт иконку скачать и выводит её в блок :blink:
Я в php не силён, может кто исправит ошибку?

<?php 
if (!defined('CMS'))
	die('Попытка взлома?');
	 
$Mainclass->LoadOptions('module_news',false);
$Mainclass->Url->ending=$Mainclass->vars['m_news_ending'];   
$Mainclass->LoadClass('classes/others/class_categories_l.php');
$Mainclass->Categories_l->url_ending=$Mainclass->vars['m_news_category_ending'];
$Mainclass->Categories_l->table_name='news_categories';
$Mainclass->Categories_l->Init();
$ug=$Mainclass->Account->GetUserGroups();
sort($ug,SORT_NUMERIC);
$ug=' OR `groups` LIKE \'%,'.implode(',%,',$ug).',%\'';	
$Mainclass->Db->Query('SELECT `id`,`url`,`main_cat`,`title`,`text`,`author`,`author_id` FROM `f_news` INNER JOIN `f_news_l` USING(`id`) WHERE `language`IN(\'\',\''.$Mainclass->lang_name.'\') AND `status`=1 AND (`groups`=\'\''.$ug.') ORDER by RAND() Limit 0,1');
if($Mainclass->Db->Num_rows()==0)
	return;
$arr=$Mainclass->Db->Fetch_assoc();	
$url='news/'.($Mainclass->vars['m_news_long_url'] ? $Mainclass->Categories_l->CategoryUrl($arr['main_cat'],'','',false) : '').$Mainclass->Url->ConstructUrl(array(array($arr['url'],'nid'=>$arr['id'])),!$Mainclass->vars['m_news_lo</span>ng_url']); 
$whopost=$Mainclass->Login->UserLink($arr['author'],$arr['author_id']);
if(preg_match('|<img(.*) src="([^"]*)"[^>]*>|is', $arr['text'], $images)){
	$img_parts=pathinfo($images[2]);
   	$img_link=$img_parts['dirname'].'/'.$img_parts['basename'];
   	$img_info=@getimagesize($img_link);  
   	$img_width=$img_info[0];
   	$img_height=$img_info[1];
   	if($img_width>$img_height){
		$img_code = '<a href="'.$url.'"><img src="'.$img_link.'" alt="'.$arr['title'].'" width="80" /></a><br />';
   	}else $img_code = '<a href="'.$url.'"><img src="'.$img_link.'" alt="'.$arr['title'].'" height="80" /></a><br />';
}
$content.=$img_code.'<h3><a href="'.$url.'">'.$arr['title'].'</a></h3>';				
?>
Alexander
ORDER by RAND()

Ай, как нехорошо. Повесим сервак при наличии 500 новостей.

Судя по всему берет первую попавшуюся иконку.
Loader
Цитата (Alexander @ 2010-08-10, 0:08)
Ай, как нехорошо. Повесим сервак при наличии 500 новостей.


О Сайте: на 10 августа 2010Фильмов: 259
Страница сгенерирована за 0.268 секунд(ы).

Да вроде нет такой тенденции... :unsure:

Loader
Ещё мнения есть? :mellow:
Loader
В-общем видел такой блок в работе на одном из сайтов, но там изображения вставлены не как объект, а как [IMG]
и он там работает на 100%
Тут же ничего сложного, просто прикрутить его к ATTACH нужно!
HELP! :help:
Phoenix84
Прошу прощения, не так понял. Там главное RegExp.
azacgrus
Alexander, как можно по-другому искать случайную запись в базе? Т.к. гавнокод выше мой :) И да он берёт первую картинку из новости.
Phoenix84
azacgrus, сделай не по первой картинке, а по первому аттачу. Я бы может и помог, но регэкспы мне недаются никак...

Советую сначала взять количество самих новостей. Потом сделать рандом от 1 до этого числа, а потом просто взять новость этого числа :)
Loader
Цитата (Phoenix84 @ 2010-08-21, 19:23)
azacgrus, сделай не по первой картинке, а по первому аттачу. Я бы может и помог, но регэкспы мне недаются никак...


azacgrus, сделай это ПЛИЗЗЗЗ!!!
Alexander
Цитата (azacgrus @ 2020-10-19 19:00)
Alexander, как можно по-другому искать случайную запись в базе?

Самое простое и правильное, но делается в два запроса.
1. Извлекаем общее число новостей из базы. Пишу запросы примерами, ибо некогда.

SELECT COUNT(`id`) FROM `table`


Это число записываем в переменную $cnt. После этого проводим такую манипуляцию с переменной:
$cnt=mt_rand(0,$cnt-1);


Ну а далее через обычный лимит:

SELECT * FROM `table` LIMIT $cnt, 1
azacgrus
Alexander, до меня потом дошло уже, но всё равно спасибо.
Loader, если будет время, то переделаю.
Loader
Цитата (Alexander @ 2010-08-21, 23:29)
Это число записываем в переменную $cnt. После этого проводим такую манипуляцию с переменной:
$cnt=mt_rand(0,$cnt-1);


<?php 
if (!defined('CMS'))
	die('Попытка взлома?');
	 
$limit['name']=45; //Кол-во выводимых

	 
$Mainclass->LoadOptions('module_news',false);
$Mainclass->Url->ending=$Mainclass->vars['m_news_ending'];   
$Mainclass->LoadClass('classes/others/class_categories_l.php');
$Mainclass->Categories_l->url_ending=$Mainclass->vars['m_news_category_ending'];
$Mainclass->Categories_l->table_name='news_categories';
$Mainclass->Categories_l->Init();
$ug=$Mainclass->Account->GetUserGroups();
sort($ug,SORT_NUMERIC);
$ug=' OR `groups` LIKE \'%,'.implode(',%,',$ug).',%\'';	

$Mainclass->Db->Query('SELECT COUNT(`id`) FROM `f_news` WHERE `status`=1 AND (`groups`=\'\''.$ug.')',__file__,__line__);
$cnt=$Mainclass->Db->Fetch_row();
$Mainclass->Db->Free();
$cnt=mt_rand(0,$cnt-1);


$Mainclass->Db->Query('SELECT `id`,`url`,`main_cat`,`title`,`text`,`author`,`author_id` FROM `f_news` INNER JOIN `f_news_l` LIMIT $cnt, 1');
$arr=$Mainclass->Db->Fetch_assoc();	
$url='news/'.($Mainclass->vars['m_news_long_url'] ? $Mainclass->Categories_l->CategoryUrl($arr['main_cat'],'','',false) : '').$Mainclass->Url->ConstructUrl(array(array($arr['url'],'nid'=>$arr['id'])),!$Mainclass->vars['m_news_long_url']); 
$whopost=$Mainclass->Login->UserLink($arr['author'],$arr['author_id']);

if(strlen($arr['title'])>$limit['name'] && $arr['title']!='') $arr['title'] = "".substr($arr['title'], 0, $limit['name'])."...";


$content.='<table width="100%" border="0" >
<tr valign="middle">
<td><a href="'.$url.'"><img src="/images/windowsmoviemaker.png" alt="&raquo;" /></a> </td>
<td><h3><a href="'.$url.'">'.$arr['title'].'</a></h3></td>
</table>';				
?>



Попробовал, и вот результат:

Fatal error: Unsupported operand types in /var/www/pdaki192/data/www/pda-kino.net.ru/addons/blocks/block_random_news.php on line 21

Добавлено через 5 минут, 5 секунд:

Произошла ошибка
При выполнении запроса произошла ошибка: (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$cnt, 1' at line 1

Адрес ошибки: ?[?].
Сохраняйте спокойствие: ошибка записана - админ придет, разберется.

Добавлено через 11 минут, 13 секунд:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$cnt, 1' at line 1
Query: SELECT `id`,`url`,`main_cat`,`title`,`text`,`author`,`author_id` FROM `el_news` INNER JOIN `el_news_l` LIMIT $cnt, 1
Line: ? in file ?
URL: /
Date: 2010-10-20 17:01:01
IP: 92.252.153.89
Loader
Переделал этот блок по инструкции Александра, осталось добавить вывод картинки из
[attach]



Цитата
<?php
if (!defined('CMS'))
    die('Попытка взлома?');
    
$limit['name']=45; //Кол-во выводимых сииволов

    
$Mainclass->LoadOptions('module_news',false);
$Mainclass->Url->ending=$Mainclass->vars['m_news_ending'];
$Mainclass->LoadClass('classes/others/class_categories_l.php');
$Mainclass->Categories_l->url_ending=$Mainclass->vars['m_news_category_ending'];
$Mainclass->Categories_l->table_name='news_categories';
$Mainclass->Categories_l->Init();
$ug=$Mainclass->Account->GetUserGroups();
sort($ug,SORT_NUMERIC);
$ug=' OR `groups` LIKE \'%,'.implode(',%,',$ug).',%\'';    


$cnt=$Mainclass->Cache->Get('news_total_',false);
            if($cnt==false)
            {
     $Mainclass->Db->Query('SELECT COUNT(`id`) FROM `f_news` WHERE `status`=1 AND (`groups`=\'\''.$ug.')',__file__,__line__);
list($cnt)=$Mainclass->Db->Fetch_row();
$Mainclass->Db->Free();    
            
     $Mainclass->Cache->Put('news_total_',$cnt,100,false);
            }

$cnt=mt_rand(0,$cnt-1);


$Mainclass->Db->Query('SELECT `id`,`url`,`main_cat`,`title`,`text`,`author`,`author_id` FROM `f_news` INNER JOIN `f_news_l` USING(`id`) WHERE `status`=1 AND (`groups`=\'\''.$ug.') LIMIT '.$cnt.', 1');

$arr=$Mainclass->Db->Fetch_assoc();    
$url='news/'.($Mainclass->vars['m_news_long_url'] ? $Mainclass->Categories_l->CategoryUrl($arr['main_cat'],'news_categories',false,false).$arr['url'] : $arr['url']);
$whopost=$Mainclass->Login->UserLink($arr['author'],$arr['author_id']);

if(strlen($arr['title'])>$limit['name'] && $arr['title']!='') $arr['title'] = Strings::CutStr($arr['title'], $limit['name'], "...");


$content.='<table width="100%" border="0" >
<tr valign="middle">
<td><a href="'.$url.'.html"><img src="/images/windowsmoviemaker.png" alt="&raquo;" /></a> </td>
<td align="left"><h3><a href="'.$url.'.html">'.$arr['title'].'</a></h3></td>
</table>';                
?>


azacgrus, выручай!

Loader
Как правильно составить regex для preg_match?

Допустим, есть произвольный текст, содержащий в себе:
[attach=uploads/news/467/turist.jpg preview=uploads/news/467/turist_preview.jpg]

Как нужно составить preg_match , чтобы извлечь uploads/news/467/turist.jpg

Может, Alexander подскажет? PLZ!!!
peter
Цитата (Loader @ 2011-01-22, 20:10)
Как правильно составить regex для preg_match?

Допустим, есть произвольный текст, содержащий в себе:
[attach=uploads/news/467/turist.jpg preview=uploads/news/467/turist_preview.jpg]

Как нужно составить preg_match , чтобы извлечь uploads/news/467/turist.jpg

Может, Alexander подскажет? PLZ!!!


Мне кажется лучше воспользоваться строковыми функциями - найти вхождение attach= и соответственно концовку " preview=" обезать с таково-то символа по такое-то и получится нужный текст.

Попробуй это:
#upload.{20,100}(\.jpg|\.jpeg|\.gif|\.png)#i
Alexander
примерно так:

#\[attach=(uploads[a-z0-9-\__.]+)#
Loader
Цитата (peter @ 2011-01-22, 20:23)
Мне кажется лучше воспользоваться строковыми функциями - найти вхождение attach= и соответственно концовку " preview=" обезать с таково-то символа по такое-то и получится нужный текст.

Попробуй это:
#upload.{20,100}(\.jpg|\.jpeg|\.gif|\.png)#i


Работает! Только не {20,100} а {0,100} !

Цитата (Alexander @ 2020-10-19 19:00)
примерно так:

#\[attach=(uploads[a-z0-9-\__.]+)#


А это не работает :(

Кому надо - прикладываю блок: [attachment=874:block_random_news.rar]
Alexander
Цитата (Loader @ 2020-10-19 19:00)
А это не работает

Я показал лишь пример. Даже скажу причину почему не работает: в перечне символов, забыл / :)
peter
#(upload|http://).{0,100}(\.jpg|\.jpeg|\.gif|\.png)#i


(вдруг будет изображение со стороннего ресурса?)

ПС Случайная новость не очень нравиться ботам :music:
Loader
Цитата (peter @ 2020-10-19 19:00)
ПС Случайная новость не очень нравиться ботам

Главное чтобы людям нравилось! ;)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.