+4.81
Рейтинг
15.20
Сила

Роман

Механизм хуков в движке

В продолжении топиков LiveStreet как платформа для модулей и Тест хуков в движке появилась поддержка хуков.

Использовать можно так:
1. В любом месте(модуле, экшене) установить вызов необходимого хука на метод модуля
$this->Hook_AddExecModule('topic_show','Test_MyHookRun',10);
регистрирует на событие topic_show вызов метода MyHookRun у модуля Test с приоритетом 10.
2. В любом месте установить вызов хука на функцию
$this->Hook_AddExecFunction('topic_show','var_dump',-5);
регистрирует вызов функции var_dump
3. Создать класс хука в каталоге /classes/hooks/ с именем файла HookTest.class.php с содержанием
<? 
class HookTest extends Hook {	
	public function RegisterHook() {
		$this->AddHook('topic_show','testHookFunct',__CLASS__,-3);
	}
	
	public function testHookFunct($aVars) {
		var_dump("Hook it!");
	}
}
?>

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

Зависимость цвета имени автора от его рейтинга.

Здравствуйте, разбираюсь с этим движком и захотел реализовать разный стиль вывода имени автора в комментариях, зависящий от его рейтинга (рейтинг <0 — красный, рейтинг >0 зеленый).

Реализовать оказалось очень просто! Если понадобится, я объясню!
Уже есть готовый модуль (вывести пол пользователя в комментарий и в профиль) от randomtoy.

Автоматический выбор блога для нового топика

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

Давайте сделаем ее! Тем более это очень просто.
Читать дальше →

установка в директорию (не в корень)

Возможно проблема уже поднималась, но LiveStreet не работает, если он установлен не в корне, а в какой либо директории сайта. Проблема в том, что Router.class.php считывает лишние данные (директорию движка) в качестве URL-запроса. По крайней мере у меня было так.

Мне кажется, надо заменить 78 строку в файле /classes/engine/Router.class.php на этот код:


    $aURLData = explode($_SERVER['HTTP_HOST'], DIR_WEB_ROOT);
    $sReqURI = str_replace($aURLData[1], '', $_SERVER['REQUEST_URI']);
    
    $sReq=preg_replace("/\/+/",'/',$sReqURI);


он вырезает из $_SERVER['REQUEST_URI'] путь к директории с движком.

Модернизация функции рейсайза картинок

Как понадобилось изменять размер картинок столкнулся с тем, что стандартная функция func_img_resize изменяла размер только когда указана $iWidthDest и то как-то «косячно» на мой взгляд… в общем решил я функцию переделать… сделал независимый расайз по высоте и ширине теперь если надо картинку вписать в прямоугольник то просто задаёшь $iWidthDest и $iHeightDest… а ели просто надо подогнать по высоте или ширине задаёшь только то, что надо! всё просто и работает!!! =)
может кому пригодиться…
/**
 * Рейсайзинг картинок
 *
 * @param unknown_type $sFileSrc
 * @param unknown_type $sDirDest
 * @param unknown_type $sFileDest
 * @param unknown_type $iWidthMax
 * @param unknown_type $iHeightMax
 * @param unknown_type $iWidthDest
 * @param unknown_type $iHeightDest
 * @param unknown_type $bForcedMinSize
 * @return unknown
 */
function func_img_resize($sFileSrc,$sDirDest,$sFileDest,$iWidthMax,$iHeightMax,$iWidthDest=null,$iHeightDest=null,$bForcedMinSize=true) {
	if (!($aSize=getimagesize($sFileSrc))) {		
		return false;
	}	
	$img_src=false;
	switch ($aSize['mime']) {
		case 'image/png':
			$img_src=imagecreatefrompng($sFileSrc);
			$sFileDest.='.png';
			break;
		case 'image/gif':
			$img_src=imagecreatefromgif($sFileSrc);
			$sFileDest.='.gif';
			break;
		case 'image/jpeg':
			$img_src=imagecreatefromjpeg($sFileSrc);
			$sFileDest.='.jpg';
			break;
		default:
			return false;
			break;
	}
	if (!$img_src) {		
		return false;
	}
	$iWidthNew=$aSize[0];
	$iHeightNew=$aSize[1];
	if (($iWidthNew>$iWidthMax) or ($iHeightNew>$iHeightMax)) {
		return false;
	}
	if ($iWidthDest) {
		if (!$bForcedMinSize and ($iWidthDest>$iWidthNew)) {
			$iWidthDest=$iWidthNew;
		}
		$iSizeRelation=$iWidthDest/$iWidthNew;	
		$iWidthNew=$iWidthDest;		
		$iHeightNew=round($iSizeRelation*$iHeightNew);
	}
	if ($iHeightDest) {
		if (!$bForcedMinSize and ($iHeightDest>$iHeightNew)) {
			$iHeightDest=$iHeightNew;
		}
		$iSizeRelation=$iHeightDest/$iHeightNew;
		$iHeightNew=$iHeightDest;			
		$iWidthNew=round($iSizeRelation*$iWidthNew);
	}
	
	
	$sFileFullPath=DIR_SERVER_ROOT.'/'.$sDirDest.'/'.$sFileDest;
	@func_mkdir(DIR_SERVER_ROOT,$sDirDest);
	if (($iWidthDest and $iWidthDest!=$aSize[0])or($iHeightDest and $iHeightDest!=$aSize[1])) {
		$img_dest=imagecreatetruecolor($iWidthNew,$iHeightNew);		
		imagesavealpha($img_dest,true);
		imagealphablending($img_dest,false);
		if (imagecopyresampled($img_dest,$img_src,0,0,0,0,$iWidthNew,$iHeightNew,$aSize[0],$aSize[1])) {				
			imagedestroy($img_src);
			switch ($aSize['mime']) {
				case 'image/png':
					if (imagepng($img_dest,$sFileFullPath)) {
						chmod($sFileFullPath,0666);
						return $sFileDest;
					}
					break;
				case 'image/gif':
					if (imagegif($img_dest,$sFileFullPath)) {
						chmod($sFileFullPath,0666);
						return $sFileDest;
					}
					break;
				case 'image/jpeg':
					if (imagejpeg($img_dest,$sFileFullPath)) {
						chmod($sFileFullPath,0666);
						return $sFileDest;
					}
					break;
			}
		}
	} else {
		if (copy($sFileSrc,$sFileFullPath)) {
			return $sFileDest;
		}
	}
	return false;
}

Сжатие страниц LiveStreet на лету

В ходе выяснения подробностей сжатия статей на LiveStreet родилось краткое how-to.

Шаг 1. Проверка. Чтобы проверить, сжимаются ли уже у вас сейчас страницы, можно воспользоваться сервисом whatsmyip.org/mod_gzip_test/
Читать дальше →

Использование поддоменов в LiveStreet

У многих возникает необходимость использовать поддомены для своих проектов на базе LiveStreet, например вынести на поддомены блоги.
Сделать это можно разными путями, например через реврайты в .htaccess, либо через роутер движка.
Я покажу как это можно сделать на примере последнего варианта, т.е. через роутер.

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

Внутренний голос. По заявкам :)

Хабраклонирование по заявкам жаждущих :)
Итак, что же такое внутренний голос — пример можно посмотреть на… ну конечно, хабре.
А вот здесь написано зачем это нужно.
Читать дальше →

Биржи ссылок Sape, Setlinks: установка кода

Устанавливаем следующий код в templates/new/sidebar.tpl для:

Sape:

{php}
     if (!defined('_SAPE_USER')){
        define('_SAPE_USER', 'ваш_код'); 
     }
     require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'); 
     $sape = new SAPE_client();
     echo $sape->return_links();
{/php}


Setlinks:

{php}
require_once ($_SERVER['DOCUMENT_ROOT'].'/ваш_код/slclient.php');
$sl = new SLClient();
print($sl->GetLinks());
{/php}