0.00
Рейтинг
0.39
Сила

Кирилл

Возможность просмотра оригинального загруженного изображения в теме

В том или ином виде неплохо иметь возможность доступа к оригиналу загруженного изображения в теме. Идея не нова, есть даже плагин (не совместимый с последней версией) и схожая тема с решением.

Моё решение:
* в Topic.class.php в методе UploadTopicImageFile — загрузка с компьютера
меняем
@unlink($sFileTmp);
return $this->Image_GetWebPath($sFileImage);
на
$aPathInfo=pathinfo($sFileImage);
@rename($sFileTmp, $aPathInfo['dirname'].'/'.$aPathInfo['filename'].'_full.'.$aPathInfo['extension']);
return $this->Image_GetWebPath($sFileImage);
т.е. не удаляем оригинальное изображение, а переименовываем на имя конечного, но с приставкой _full
* добавляем автоматическое оборачивание <_img_> в <_a_> (ActionAjax.class.php метод EventUploadImage)
меняем
$this->Viewer_AssignAjax('sText',$sText);
на
$aPathInfo=pathinfo($sFile);
$sFileFull=$aPathInfo['dirname'].'/'.$aPathInfo['filename'].'_full.'.$aPathInfo['extension'];
if( file_exists( $this->Image_GetServerPath( $sFileFull ) ) )
 $sText='<a href="'.$sFileFull.'">'.$sText.'</a>';
$this->Viewer_AssignAjax('sText',$sText);


Как-то так :)

Критика и улучшения приветствуются!

LiveStreet как SEO friendly CMS - давайте же наконец разберемся!

Тут некий (или некая) Znayka , уже писал подобный пост будучи некомпетентным в этом (даже не указав откуда он взял исходный текст), только в нем почему-то без каких-либо пояснений значилось что лс «не торт». Этот же топик — перевод статьи + сравнение с тем, что мы уже имеем в ЛС, подведением итога и указанием обратного — ЛС ещё очень даже хорош. Это кросспост из гида по LiveStreet. Так давайте же посмотрим на полную картинку.

А внутри пряники

Они вернулись. Минусы.

Мы возвращаем на сайт минусы, но теперь они будут под присмотром плагина «Magic Rule»

Настройки у нас такие:
/**
 * Список правил
 * Для каждого действия составляется отдельная группа правил, групп может быть несколько
 * Список действий: vote_comment, vote_topic, vote_user, create_comment, create_topic
 * В параметре msg можно указать сообщение, которое будет отображаться пользователю, можно использовать просто текст или указать ключ из языкового файла, например, 'message_cant_vote'
 *
 * Список доступных критериев:
 *	registration_time - время в секундах с момента регистрации пользователя
 *	rating - необходимый минимальный рейтинг
 *	skill - необходимая минимальная сила
 *	count_comment - необходимое минимальное количество комментариев у пользователя
 *	count_topic - необходимое минимальное количество топиков у пользователя
 *  rating_sum_topic - необходимый суммарный рейтинг топиков пользователя за период. По умолчанию период 14 дней, для изменения периода можно указать значение ввиде массива array(rating,period)
 *  rating_sum_comment - необходимый суммарный рейтинг комментариев пользователя за период. По умолчанию период 7 дней, для изменения периода можно указать значение ввиде массива array(rating,period)
 *
 * Любой из критериев можно опустить.
 */
$config['rule']=array(
	'vote_comment' => array(
		'msg' => 'Вы еще не достаточно окрепли!',
		'groups' => array(
			/**
			 * Голосовать за комментарии могут юзеры старше 3-х дней, рейтинг больше -5, написал больше 10 комментариев,
			 * суммарный рейтинг комментариве за последние 7 дней больше -10
			 */
			array(
				'registration_time' => 60*60*24*3,
				'rating' => -5,
				'count_comment' => 2,
				'rating_sum_comment' => array(-10,60*60*24*7),
			),
		),
	),
	'vote_topic' => array(
		'msg' => 'Вы еще не достаточно окрепли!',
		'groups' => array(
			/**
			 * Голосовать за топики могут юзеры старше 3-х дней, рейтинг больше -3, написал хотя бы 1 топик,
			 * суммарный рейтинг топиков за последние 14 дней больше -5
			 */
			array(
				'registration_time' => 60*60*24*3,
				'rating' => -3,
				'count_topic' => 1,
				'rating_sum_topic' => array(-5,60*60*24*14),
			),
		),
	),
	'vote_user' => array(
		'msg' => 'Вы еще не достаточно окрепли!',
		'groups' => array(
			/**
			 * Голосовать за пользователя могут юзеры старше 14 дней, рейтинг больше 3, написал хотя бы 3 топика,
			 * суммарный рейтинг топиков за последние 30 дней больше 0
			 */
			array(
				'registration_time' => 60*60*24*14,
				'rating' => 3,
				'count_topic' => 3,
				'rating_sum_topic' => array(0,60*60*24*30),
			),
		),
	),
);

/**
 * Правила для создания блокировок
 * Группы правил необходимо располагать по приоритету - вверху самые главные
 * Если группа правил сработала, то создается блокировка и обход нижестоящих правил прекращается
 *
 * Параметры правил:
 *	name - название правила блокировки, для учета в таблице блокировок. Название ограничено в 50 символов
 * 	type - список типов голосований, up - за, down - против
 *	target - список сущностей за которые голосуют
 * 	count - количество голосований
 * 	rating - максимальный порог рейтинга пользователя, блокировка используется только если рейтинг пользователя ниже этого
 * 	period - период, за который необходимо считать количество голосований, в секундах
 * 	block_time - время, на которое необходимо блокировать возможность голосования
 * 	block_msg - сообщение, которое будет видеть пользователь при попытке голосования
 */
$config['block_rule_vote']=array(
	/**
	 * Если пользователь за 20 минут успел поставить 5 минусов за комментарии и рейтинг пользователя меньше 3, то блокируем ему голосование на 5 часов
	 */
	array(
		'name' => 'block 1', //
		'type' => array('down'),
		'target' => array('comment'),
		'count' => 5,
		'rating' => 3,
		'period' => 60*20,
		'block_time' => 60*60*5,
		'block_msg' => 'Вы слишком агрессивны, нужно отдохнуть!',
	),
	/**
	 * Если пользователь за 48 часов успел поставить 10 минуса за топики и рейтинг пользователя меньше 5, то блокируем ему голосование на 24 часа
	 */
	array(
		'name' => 'block 2', //
		'type' => array('down'),
		'target' => array('topic'),
		'count' => 10,
		'rating' => 5,
		'period' => 60*60*48,
		'block_time' => 60*60*24,
		'block_msg' => 'Вы слишком агрессивны, нужно отдохнуть!',
	),
	/**
	 * Если пользователь за 3 часа успел поставить 4 минуса за топики и рейтинг пользователя меньше 5, то блокируем ему голосование на 12 часов
	 */
	array(
		'name' => 'block 3', //
		'type' => array('down'),
		'target' => array('topic'),
		'count' => 4,
		'rating' => 5,
		'period' => 60*60*3,
		'block_time' => 60*60*12,
		'block_msg' => 'Вы слишком агрессивны, нужно отдохнуть!',
	),
	/**
	 * Если пользователь за 8 часов успел поставить 3 минуса за пользователя и рейтинг пользователя меньше 10, то блокируем ему голосование на 1 день
	 */
	array(
		'name' => 'block 4', //
		'type' => array('down'),
		'target' => array('user'),
		'count' => 3,
		'rating' => 10,
		'period' => 60*60*8,
		'block_time' => 60*60*24*1,
		'block_msg' => 'Вы слишком агрессивны, нужно отдохнуть!',
	),
);


Всем удачи!

Изменить положение кнопки в toolbar

Товарищи, кто может подсказать, добавил кнопку в toolbar, но как переместить именно ее налево? Т.е. Кнопки навигации по топикам, кнопку для перехода в Админпанель оставить справа, а вновь созданную кнопку поместить слева… Понял что все зарыто в файле template.js Кто сможет подсказать, в какую сторону смотреть и искать…

Мануал как вывести количество топиков в любом месте шаблона

Как оказывается это делаетсяочень просто

1. Ставим вот данный плагин http://livestreetcms.com/addons/view/512/ и устанавливаем его на сайте.
2. В том месте где нужно вывести счётчик вставляем слдующее :

Читать дальше →

Решение: Как сделать проверку на минимальное количество символов в топике

В конфиге движка есть настройка:
$config['module']['topic']['max_length'] = 25000;       // Максимальное количество символов в одном топике


А вот такой же для минимальной нету. По умолчанию для всех-всех полей оно равно 2 и записывается хардкодом. Вот подсказка, для тех, кому нужна эта настройка.
Читать дальше →

share42 и LiveStreet

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

Отступление: На справедливый вопрос «а зачем это вообще нужно?» у меня нету готового ответа. Это SEO. Но базовая интеграция с социальными сетями в каком-то виде, есть в шаблонах изначально. На мой взгляд этого мало, но даже в рамках команды нашего сайта, мы долго обсуждали необходимость дополнительных усилий в этом направлении, и целесообразность применения share42, в частности. Тема глубоко субъективная.

Так вот, плагин для подобной задачи кажется мне слишком тяжёлым решением, а ручная модификация tpl-ей шаблонов — слишком грубым.

В итоге, я решил попробовать прикрутить кнопки применив механизм блоков.

Читать дальше →

Код Google Analytics

Есть несколько вопросов по Google Analytics.

1) Правильно ли я сделал, что вставил его код в footer.tpl внутри тега
<body>
?

2) Когда я смотрю код страницы, я вижу в нем
<script type="text/javascript">
			var _lsIsLoadGA=(typeof(window._gaq)=='undefined') ? false : true ;

			  var _gaq = _gaq || [];
			  _gaq.push(['lscounter._setAccount', 'UA-yyyyyyyy-1']);
			  _gaq.push(['lscounter._trackPageview']);

			if (!_lsIsLoadGA) {
			  (function() {
				var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
				ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
				var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
			  })();
			}
			</script>
		


<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-xxxxxxxx-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

UA-xxxxxxxx-1 — это мой идентификатор, что такое тогда UA-yyyyyyyy-1?

3) Если я захочу вставить еще, например, код Яндекс.Метрики, эти фрагменты кода заключать в {literal} по отдельности или вместе?