CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Постинг новостей в ЖЖ
Официальный форум Eleanor CMS » Поддержка пользователей системы Eleanor CMS » Секреты и советы
DARK_Vovich
Итак, стояла у меня как-то задача сделать возможность размещения новостей с сайта в ЖЖ. Я рассмотрел различные варианты, как это можно сделать.
В LiveJournal можно передавать текст двумя способами:
1. В виде ссылки
http://www.livejournal.com/update.bml?subject='Заголовок сообщения'&event='Основной текст'

+проще реализовать
-ограничение длины передаваемой строки (около 500-700 символов)

2. Через форму
<form method="post" action="http://www.livejournal.com/update.bml" name="updateForm" target="_blank">...</form>

+неограниченное количество символов
-сложнее реализация

В итоге я решил использовать первый способ и позаимствовать идею с сайта GZT.ru: идея в том, что в livejournal публикуется красивая плашка с кратким текстом и ссылкой на полную новость.

Вывод в шаблон сделал через закладки (bookmark), т.к. не использовал их по назначению. Но можно сделать и отдельную переменную.

Пример реализации: http://musora.bolshe.net/news/blogs...-po-russki.html (кнопка "В блог")

Как реализовать на JS не знал, поэтому сделал на php. Код только для систем с кодировкой WIN-1251 (не UTF8), т.к. здесь используется система перекодировки текста в utf8 для передачи:
1. Открываем файл modules/news/user/index.php
1.1. Ищем строчку
if(!empty($Mainclass->vars['allow_bookmarks']) and $Mainclass->Login->IsUser())
и комментируем (ставим /* ... */ следующий участок кода
/*if(!empty($Mainclass->vars['allow_bookmarks']) and $Mainclass->Login->IsUser())
	{
		$uid=(int)$Mainclass->Account->GetValue('id');
		$Mainclass->Db->Query('SELECT `id` FROM `f_bookmarks` WHERE `uid`='.$uid.' AND `mid`='.$Mainclass->GetModVal('id').' AND `value`='.$arr['id'].' LIMIT 1',__file__,__line__);
		if($Mainclass->Db->Num_rows()==0)
			$bookmark='<a href="#" onclick="return ShowAddBookMarkForm('.$arr['id'].')">'.$Mainclass->lang['news']['add_to_b'].'</a>';
		else
		{
			list($bookmark)=$Mainclass->Db->Fetch_row();
			$bookmark='<a href="#" onclick="return DeleteBookMark('.$bookmark.',\'\',\'$(\\\'#bookmark\\\').html(bookmark_add)\')">'.$Mainclass->lang['news']['de<</span></span></span></span></span>/span>l_fr_b'].'</a>';
		}
		$bookmark.=Strings::JsVars(array(
											'module_id'=>$Mainclass->GetModVal('id'),
											'bookmark_add'=>'<a href="#" onclick="return ShowAddBookMarkForm('.$arr['id'].')">'.$Mainclass->lang['news']['add_to_b'].'</a>',
											'bookmark_delete'=>'<a href="#" onclick="return DeleteBookMark({value},\'\',\'$(\\\'#bookmark\\\').html(bookmark_add)\')">'.$Mainclass->lang['news']['del_fr_b'].'</a>',
		));
	}
	else
		$bookmark=false;*/


2. Ниже вставляем собственно саму функцию постинга
// Постинг новости в ЖЖ	
	$someword = 'Читать полностью на сайте Musora.Bolshe.Net';
	function myconvert($str='', $type='text'){
		
		$in_arr = array (
			chr(208), chr(192), chr(193), chr(194),
			chr(195), chr(196), chr(197), chr(168),
			chr(198), chr(199), chr(200), chr(201),
			chr(202), chr(203), chr(204), chr(205),
			chr(206), chr(207), chr(209), chr(210),
			chr(211), chr(212), chr(213), chr(214),
			chr(215), chr(216), chr(217), chr(218),
			chr(219), chr(220), chr(221), chr(222),
			chr(223), chr(224), chr(225), chr(226),
			chr(227), chr(228), chr(229), chr(184),
			chr(230), chr(231), chr(232), chr(233),
			chr(234), chr(235), chr(236), chr(237),
			chr(238), chr(239), chr(240), chr(241),
			chr(242), chr(243), chr(244), chr(245),
			chr(246), chr(247), chr(248), chr(249),
			chr(250), chr(251), chr(252), chr(253),
			chr(254), chr(255)
		);   
		$out_arr = array (
			chr(208).chr(160), chr(208).chr(144), chr(208).chr(145),
			chr(208).chr(146), chr(208).chr(147), chr(208).chr(148),
			chr(208).chr(149), chr(208).chr(129), chr(208).chr(150),
			chr(208).chr(151), chr(208).chr(152), chr(208).chr(153),
			chr(208).chr(154), chr(208).chr(155), chr(208).chr(156),
			chr(208).chr(157), chr(208).chr(158), chr(208).chr(159),
			chr(208).chr(161), chr(208).chr(162), chr(208).chr(163),
			chr(208).chr(164), chr(208).chr(165), chr(208).chr(166),
			chr(208).chr(167), chr(208).chr(168), chr(208).chr(169),
			chr(208).chr(170), chr(208).chr(171), chr(208).chr(172),
			chr(208).chr(173), chr(208).chr(174), chr(208).chr(175),
			chr(208).chr(176), chr(208).chr(177), chr(208).chr(178),
			chr(208).chr(179), chr(208).chr(180), chr(208).chr(181),
			chr(209).chr(145), chr(208).chr(182), chr(208).chr(183),
			chr(208).chr(184), chr(208).chr(185), chr(208).chr(186),
			chr(208).chr(187), chr(208).chr(188), chr(208).chr(189),
			chr(208).chr(190), chr(208).chr(191), chr(209).chr(128),
			chr(209).chr(129), chr(209).chr(130), chr(209).chr(131),
			chr(209).chr(132), chr(209).chr(133), chr(209).chr(134),
			chr(209).chr(135), chr(209).chr(136), chr(209).chr(137),
			chr(209).chr(138), chr(209).chr(139), chr(209).chr(140),
			chr(209).chr(141), chr(209).chr(142), chr(209).chr(143)
		); 
		
		if($type=='text') return str_replace($in_arr,$out_arr, strip_tags($str, '<a><strong><b>'));
		if($type=='title')return str_replace($in_arr,$out_arr,$str);
		if($type=='word') return str_replace($in_arr,$out_arr, $str);
	}
	
	$mytext = myconvert($text, 'word');
	$mytext2 = substr ($mytext, 0, 370-strlen (strrchr (substr ($mytext, 0, 370), ' ')));
	$myurl = 'http://musora.bolshe.net/'.substr($url,0,-1).'.html';
	$mytext3 = '<div style="border: 1px solid #7FC145; width: 500px; background-color: white; margin:0px; padding: 0px; clear: both;"><div style="border-bottom: 10px solid #fdbe31; padding: 10px;  margin:0px;"><a href="http://musora.bolshe.net"><img border="0" hspace="10" vspace="10" src="http://musora.bolshe.net/images/banners/logos/mbn_logo_sm.jpg" styl</span>e="border: 0px; margin: 0px;" /></a></div><div style="padding: 10px"><a style="color: #4fb839; text-decoration: none;" href="'.$myurl.'"><h2 style="background-color: white; padding:0px; margin: 0px 0px 5px 0px; text-align: left; border: 0px; font-size: 18px;">'.myconvert($title, 'title').'</h2></a><div style="padding: 0px; margin: 0px; color: black">'.$mytext2.'...<div style="text-align: right; padding: 0px;"><a style="color: #fdbe31;" href="'.$myurl.'">'.myconvert($someword, 'word').'</a></div><div style="clear:both"></div></div></div></div>';
	
	$bookmark='<a href="http://www.livejournal.com/update.bml?subject='.myconvert($title, 'title').'&event='.urlencode($mytext3).'" target="_blank" title="Запостить у себя в ЖЖ"><img src="images/icons/social/to_lj.gif" alt="" /></a>';
	// Конец правки


3. Настраиваем под себя:
3.1. Меняем название сайта на своё:
$someword = 'Читать полностью на сайте Musora.Bolshe.Net';

3.2. Здесь можно указать, какие тэги не обрезать
if($type=='text') return str_replace($in_arr,$out_arr, strip_tags($str, '<a><strong><b>'));

3.3. Меняем адрес сайта:
$myurl = 'http://musora.bolshe.net/'.substr($url,0,-1).'.html';

3.4. Шаблон оформления публикуемой плашки:
$mytext3 = '.....';

3.4.1. Заменяем цвета на свои (стили) и ссылку на логотип
<a href="http://musora.bolshe.net"><img border="0" hspace="10" vspace="10" src="http://musora.bolshe.net/images/banners/logos/mbn_logo_sm.jpg" style="border: 0px; margin: 0px;" /></a>

3.5. Меняем картинку кнопки "В блог"
$bookmark='<a href="http://www.livejournal.com/update.bml?subject='.myconvert($title, 'title').'&event='.urlencode($mytext3).'" target="_blank" title="Запостить у себя в ЖЖ"><img src="images/icons/social/to_lj.gif" alt="" /></a>';

3.6. Регулируем количество символов для обрезания
$mytext2 = substr ($mytext, 0, 370-strlen (strrchr (substr ($mytext, 0, 370), ' ')));


Не знаю, может это не кому не пригодится, но вполне имеет право на жизнь. Вывод можно изменить под себя, допустим убрать все оформление, тогда текста поместится больше.

Так же хотелось бы получить немного помощи от знающих:
1. Как этот страшный код можно оптимизировать?
2. Постоянно в логи пишется ошибка вида:
Цитата
Warning: Missing argument 2 for myconvert(), called in /var/www/mbn/data/www/musora.bolshe.net/modules/news/user/index.php on line 574 and defined Line: 516 in file /var/www/mbn/data/www/musora.bolshe.net/modules/news/user/index.php
URL: /news/blogs/proekt-kak-yeto-po-russki.html
Date: 2011-01-23 16:31:48
IP: 79.173.96.62

Warning: Missing argument 3 for myconvert(), called in /var/www/mbn/data/www/musora.bolshe.net/modules/news/user/index.php on line 574 and defined Line: 516 in file /var/www/mbn/data/www/musora.bolshe.net/modules/news/user/index.php
URL: /news/blogs/proekt-kak-yeto-po-russki.html
Date: 2011-01-23 16:31:48
IP: 79.173.96.62
Огромное спасибо peter за оптимизацию моего кривого кода!))
:dntknw:
Alexander
DARK_Vovich, функция myconvert требует передавать ей 3 параметра:

Цитата (DARK_Vovich @ 2020-10-22 07:01)
function myconvert($title,$text,$someword)


Вы же передаете только 1. Вот и ошибка.
Цитата
myconvert($text);
DARK_Vovich
Цитата (Alexander @ 2011-01-23, 20:43)
DARK_Vovich, функция myconvert требует передавать ей 3 параметра:



Вы же передаете только 1. Вот и ошибка.

Ага, уже понял. Спасибо!

Пост обновил.
Jon
Уже близко )
Мне нужно сделать наоборот, копировать посты с моего ЖЖ. Либо граббером RSS или хз как.
NoIndex
Jon, http://mihavxc.ru/text/10_Perenos_bloga_s_livejournal_ZhZh_na_sobstvennyy_sayt/ - можно под Eleanor заточить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.