X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

2 страниц Открыть меню   1 2 >  
Ответить в данную темуНачать новую тему
> [решено]Помогите исправить Блок случайных новостей
Loader
сообщение 2010-08-09, 15:53
Сообщение #1
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Собственно, скачал и установил этот блок, в результате у меня такое впечатление сто он неправильно ищет картинку,
здесь: 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>';				
?>


Сообщение отредактировал Loader - 2011-01-22, 22:53
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2010-08-09, 23:08
Сообщение #2
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


ORDER by RAND()

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

Судя по всему берет первую попавшуюся иконку.
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2010-08-10, 9:23
Сообщение #3
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


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


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

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



Сообщение отредактировал Loader - 2010-08-10, 9:24
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2010-08-16, 19:04
Сообщение #4
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Ещё мнения есть? :mellow:

Сообщение отредактировал Loader - 2010-08-16, 19:05
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2010-08-21, 18:26
Сообщение #5
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


В-общем видел такой блок в работе на одном из сайтов, но там изображения вставлены не как объект, а как [IMG]
и он там работает на 100%
Тут же ничего сложного, просто прикрутить его к ATTACH нужно!
HELP! :help:
Перейти в начало страницы
+Цитировать сообщение
Phoenix84
сообщение 2010-08-21, 18:37
Сообщение #6
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 231
Регистрация: 2010-03-31
Версия системы: RC5

Репутация:   нет  
Всего: нет


Прошу прощения, не так понял. Там главное RegExp.

Сообщение отредактировал Phoenix84 - 2010-08-21, 19:04
Перейти в начало страницы
+Цитировать сообщение
azacgrus
сообщение 2010-08-21, 19:19
Сообщение #7
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 246
Регистрация: 2008-12-13
Из: Санкт-Петербург

Репутация:   нет  
Всего: 12


Alexander, как можно по-другому искать случайную запись в базе? Т.к. гавнокод выше мой :) И да он берёт первую картинку из новости.
Перейти в начало страницы
+Цитировать сообщение
Phoenix84
сообщение 2010-08-21, 19:23
Сообщение #8
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 231
Регистрация: 2010-03-31
Версия системы: RC5

Репутация:   нет  
Всего: нет


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

Советую сначала взять количество самих новостей. Потом сделать рандом от 1 до этого числа, а потом просто взять новость этого числа :)

Сообщение отредактировал Phoenix84 - 2010-08-21, 19:37
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2010-08-21, 20:02
Сообщение #9
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


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


azacgrus, сделай это ПЛИЗЗЗЗ!!!
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2010-08-21, 23:29
Сообщение #10
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (azacgrus @ 2024-03-29 03:33)
Alexander, как можно по-другому искать случайную запись в базе?

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

SELECT COUNT(`id`) FROM `table`


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


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

SELECT * FROM `table` LIMIT $cnt, 1
Перейти в начало страницы
+Цитировать сообщение
azacgrus
сообщение 2010-08-22, 0:05
Сообщение #11
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 246
Регистрация: 2008-12-13
Из: Санкт-Петербург

Репутация:   нет  
Всего: 12


Alexander, до меня потом дошло уже, но всё равно спасибо.
Loader, если будет время, то переделаю.
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2010-10-20, 16:53
Сообщение #12
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (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
сообщение 2011-01-22, 18:07
Сообщение #13
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Переделал этот блок по инструкции Александра, осталось добавить вывод картинки из
[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 - 2011-01-22, 18:08
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-01-22, 19:10
Сообщение #14
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Как правильно составить 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!!!

Сообщение отредактировал Loader - 2011-01-22, 19:12
Перейти в начало страницы
+Цитировать сообщение
peter
сообщение 2011-01-22, 20:23
Сообщение #15
Заглянувший
Иконка группы

Группа: Персона нон грата
Сообщений: 24
Регистрация: 2010-06-09
Версия системы: RC5

Репутация:   нет  
Всего: нет


Цитата (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


Сообщение отредактировал peter - 2011-01-22, 21:00
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-01-22, 21:07
Сообщение #16
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


примерно так:

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

Сообщение отредактировал Alexander - 2011-01-22, 21:38
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-01-22, 22:09
Сообщение #17
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


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

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


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

Цитата (Alexander @ 2024-03-29 03:33)
примерно так:

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


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

Кому надо - прикладываю блок: Прикрепленные файлы  block_random_news.rar ( 1.15 килобайт ) Скачиваний: 3


Сообщение отредактировал Loader - 2011-01-22, 22:54

Прикрепленные файлы
Прикрепленные файлы  block_random_news.rar ( 1.15 килобайт ) Скачиваний: 3
 
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-01-23, 3:38
Сообщение #18
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Loader @ 2024-03-29 03:33)
А это не работает

Я показал лишь пример. Даже скажу причину почему не работает: в перечне символов, забыл / :)
Перейти в начало страницы
+Цитировать сообщение
peter
сообщение 2011-01-23, 16:06
Сообщение #19
Заглянувший
Иконка группы

Группа: Персона нон грата
Сообщений: 24
Регистрация: 2010-06-09
Версия системы: RC5

Репутация:   нет  
Всего: нет


#(upload|http://).{0,100}(\.jpg|\.jpeg|\.gif|\.png)#i


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

ПС Случайная новость не очень нравиться ботам :music:

Сообщение отредактировал peter - 2011-01-23, 16:12
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-01-24, 9:26
Сообщение #20
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (peter @ 2024-03-29 03:33)
ПС Случайная новость не очень нравиться ботам

Главное чтобы людям нравилось! ;)
Перейти в начало страницы
+Цитировать сообщение

2 страниц Открыть меню   1 2 >
Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0398 сек.    11 запросов    GZIP включен    Сейчас: 2024-03-29, 3:33