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

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

 
Ответить в данную темуНачать новую тему
> Как добавить опцию массовой обработки новостей
myk0lka
сообщение 2009-08-28, 17:33
Сообщение #1
Новичок
Иконка группы

Группа: Персона нон грата
Сообщений: 74
Регистрация: 2009-05-08
Из: Москва

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


Собственно что хочу:
хочу в администрировании новостей добавить к имеющемуся списку действий, применяемых к нескольким выделенным новостям еще один пункт.

Я так понимаю что в хтмл это засунуть нужно в функции ShowNews админского index.php вот тут (стр.296-297):

$op_list=Template::Option($Mainclass->lang['main']['activate'],'a').Template::Option($Mainclass->lang['main']['deactivate'],'d').Template::Option($Mainclass->lang['main']['turn_active'],'s').Template::Option($Mainclass->lang['main']['delete'],'k').Template::Option($Mainclass->lang['main']['mark_new'],'n');


Нужно только свой пункт добавить в языковой файл (например new_options=новая опция) и добавить в этот блок свой пунк с ассоциированной с ним литерой:

Template::Option($Mainclass->lang['main']['new_options'],'z')


А обработка присланых из формочки данных происходит тут же, только чуть повыше (стр.262-292):

switch(strtolower($Mainclass->POST['op']))
		{
			case 'd':
				$Mainclass->Db->Update('news',array('status'=>0),'`id`'.$Mainclass->Db->In($Mainclass->POST['mass']),__file__,__line__);
			break;
			case 'a':
				$Mainclass->Db->Update('news',array('status'=>1),'`id`'.$Mainclass->Db->In($Mainclass->POST['mass']),__file__,__line__);
			break;
			case 's':
				$Mainclass->Db->Update('news',array('!status'=>'NOT `status`'),'`id`'.$Mainclass->Db->In($Mainclass->POST['mass']),__file__,__line__);
			break;
			case 'k':
				$Mainclass->Loadclass('classes/others/class_uploader.php');
				$Mainclass->LoadClass('classes/others/class_comments.php');
				$Mainclass->Db->Query('SELECT `url` FROM `f_news` WHERE `id`'.$Mainclass->Db->In($Mainclass->POST['mass']),__file__,__line__);
				while($arr=$Mainclass->Db->Fetch_assoc())
				{
					$Mainclass->Uploader->DeleteFile('news',$arr['url']);
					$Mainclass->Uploader->DeleteFile('temp_news',$arr['url']);
				}
				$Mainclass->Comments->DeleteComments($Mainclass->POST['mass']);
				$Mainclass->Db->Delete('news','`id`'.$Mainclass->Db->In($Mainclass->POST['mass']),__file__,__line__);
				$Mainclass->Db->Delete('news_l','`id`'.$Mainclass->Db->In($Mainclass->POST['mass']),__file__,__line__);
				$Mainclass->Db->Delete('news_nt','`news`'.$Mainclass->Db->In($Mainclass->POST['mass']),__file__,__line__);
			break;
			case 'n':
				$Mainclass->Db->Update('news',array('status'=>-1),'`id`'.$Mainclass->Db->In($Mainclass->POST['mass']),__file__,__line__);
			break;
		}


Свой обработчик новой опции добавится в этот блок так:

case 'z':
				$Mainclass->Db->Update('????',?????,???????,__file__,__line__);
			break;


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

Вопщем нельзя ли пояснить этот вопрос поподробней?
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-08-28, 18:02
Сообщение #2
Eleanor developer
Иконка группы

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

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


Первое - это таблица.
Второе - это массив вида array('поле'=>'значение');
Третье - условие отбора, секция WHERE но без WHERE. Например `id`=1
Перейти в начало страницы
+Цитировать сообщение
myk0lka
сообщение 2009-08-28, 20:51
Сообщение #3
Новичок
Иконка группы

Группа: Персона нон грата
Сообщений: 74
Регистрация: 2009-05-08
Из: Москва

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


Цитата (Alexander @ 28.8.2009, 19:02)
Второе - это массив вида array('поле'=>'значение');


Ага.... Спасибо.....

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

Проще будет, если я скажу, что хочу в результате:

Я импортировал новости с базы Антислаеда и теперь у меня у всех новостей урлы кирилицей. Я хочу сделать опцию формирования урла для выбранных новостей путем перевода кирилического наименования пропущенного через Strings::Translit.

Просто новостей там больше полутора сотен.... Руками ой как не хочется это делать..... Да и на будущее сгодится.....
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-08-28, 22:51
Сообщение #4
Eleanor developer
Иконка группы

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

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


Это не много новостей. Вот было было порядка 10000 - я бы еще задумался. Набросал код немножко:
$result=$Mainclass->Db->Query('SELECT `id`,`title` FROM `f_news` INNER JOIN `f_news_l` USING (`id`) GROUP BY `id`',__file__,__line__);
while($arr=$Mainclass->Db->Fetch_assoc($result))
{
	$url=$Mainclass->Url->UrlString(Strings::Translit($arr['title']));
	$Mainclass->Db->Update('news',array('url'=>$url),'`id`='.$arr['id'].' LIMIT 1',__file__,__line__);
}
Перейти в начало страницы
+Цитировать сообщение
myk0lka
сообщение 2009-08-28, 23:29
Сообщение #5
Новичок
Иконка группы

Группа: Персона нон грата
Сообщений: 74
Регистрация: 2009-05-08
Из: Москва

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


Цитата (Alexander @ 28.8.2009, 23:51)
Это не много новостей. Вот было было порядка 10000 - я бы еще задумался. Набросал код немножко:
$result=$Mainclass->Db->Query('SELECT `id`,`title` FROM `f_news` INNER JOIN `f_news_l` USING (`id`) GROUP BY `id`',__file__,__line__);
while($arr=$Mainclass->Db->Fetch_assoc($result))
{
    $url=$Mainclass->Url->UrlString(Strings::Translit($arr['title']));
    $Mainclass->Db->Update('news',array('url'=>$url),'`id`='.$arr['id'].' LIMIT 1',__file__,__line__);
}

Спасибо! Утром сделаю.
Перейти в начало страницы
+Цитировать сообщение

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

 
RSS Текстовая версия 0.0369 сек.    11 запросов    GZIP включен    Сейчас: 2020-02-22, 10:26