CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Как добавить опцию массовой обработки новостей
Официальный форум Eleanor CMS » Поддержка пользователей системы Eleanor CMS » Использование системы
myk0lka
Собственно что хочу:
хочу в администрировании новостей добавить к имеющемуся списку действий, применяемых к нескольким выделенным новостям еще один пункт.

Я так понимаю что в хтмл это засунуть нужно в функции 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
Первое - это таблица.
Второе - это массив вида array('поле'=>'значение');
Третье - условие отбора, секция WHERE но без WHERE. Например `id`=1
myk0lka
Цитата (Alexander @ 28.8.2009, 19:02)
Второе - это массив вида array('поле'=>'значение');


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

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

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

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

Просто новостей там больше полутора сотен.... Руками ой как не хочется это делать..... Да и на будущее сгодится.....
Alexander
Это не много новостей. Вот было было порядка 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
Цитата (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__);
}

Спасибо! Утром сделаю.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.