+1.54
Рейтинг
4.34
Сила

youtu.be

Код обработки новых share-ссылок с youtube.com

/engine/modules/text/Text.class.php
public function VideoParser($sText) {
/**
 * youtu.be
 */
$sText = preg_replace(
        '/<video>http:\/\/(?:www\.|)youtu.be\/([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', 
        '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1?rel=0" frameborder="0" allowfullscreen></iframe>', 
        $sText);

Мультизагрузка изображений

Простой (самый простой) способ реализовать мультизагрузку картинок.

В шаблоне правим window_load_img.tpl, делаем массив img_file[] и дописываем multiple
<input type="file" name="img_file[]" id="img_file" value="" class="input-text input-width-full" multiple />


И ActionAjax.class.php, вот функция EventUploadImage() целиком
	/**
	 * Загрузка изображения
	 *
	 */
	protected function EventUploadImage() {
		/**
		 * Т.к. используется обработка отправки формы, то устанавливаем тип ответа 'jsonIframe' (тот же JSON только обернутый в textarea)
		 * Это позволяет избежать ошибок в некоторых браузерах, например, Opera
		 */
		$this->Viewer_SetResponseAjax('jsonIframe',false);
		/**
		 * Пользователь авторизован?
		 */
		if (!$this->oUserCurrent) {
			$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
			return;
		}
		$sFile=null;
                
                
                if (isPost('img_url') && $_REQUEST['img_url']!='' && $_REQUEST['img_url']!='http://') {
                        /**
                         * Загрузка файла по URl
                         */
                        $sFile=$this->Topic_UploadTopicImageUrl($_REQUEST['img_url'],$this->oUserCurrent);
                        switch (true) {
                                case is_string($sFile):

                                        break;

                                case ($sFile==ModuleImage::UPLOAD_IMAGE_ERROR_READ):
                                        $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_url_error_read'),$this->Lang_Get('error'));
                                        return;

                                case ($sFile==ModuleImage::UPLOAD_IMAGE_ERROR_SIZE):
                                        $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_url_error_size'),$this->Lang_Get('error'));
                                        return;

                                case ($sFile==ModuleImage::UPLOAD_IMAGE_ERROR_TYPE):
                                        $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_url_error_type'),$this->Lang_Get('error'));
                                        return;

                                default:
                                case ($sFile==ModuleImage::UPLOAD_IMAGE_ERROR):
                                        $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_url_error'),$this->Lang_Get('error'));
                                        return;
                        }

                        if ($sFile) {                        
                                $sText=$this->Image_BuildHTML($sFile, $_REQUEST);
                        }

                } else {

                        foreach ($_FILES['img_file'] as $k=>$v){
                           if(is_array($v)){
                               foreach ($v as $sk=>$sv){ 
                                        $arr[$sk][$k]=$sv;
                                }
                               }
                            }

                        $sText = "";

                        foreach ($arr as $_FILES['img_file']) {

                                /**
                                 * Был выбран файл с компьютера и он успешно зугрузился?
                                 */
                                if (is_uploaded_file($_FILES['img_file']['tmp_name'])) {

                                        if(!$sFile=$this->Topic_UploadTopicImageFile($_FILES['img_file'],$this->oUserCurrent)) {
                                                $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_file_error'),$this->Lang_Get('error'));
                                                return;
                                        }
                                        /**
                                         * Если файл успешно загружен, формируем HTML вставки и возвращаем в ajax ответе
                                         */
                                        if ($sFile) {
                                                $sText.=$this->Image_BuildHTML($sFile, $_REQUEST);
                                        }

                                }	

                        } //foreach

                }

		$this->Viewer_AssignAjax('sText',$sText);		
		
	}


такие дела

Лента - отделяем блоги от пользователей

Доброго времени суток!

Копался с livestreet (AltoCMS) и заметил такой глюк, в ленте не показываются посты из закрытых блогов (напрочь), даже если пользователь на них подписан… Не стал разбираться, что там и как должно работать, глянул запрос:

SELECT         
                            t.topic_id                                        
                        FROM 
                            ".Config::Get('db.table.topic')." as t,
                            ".Config::Get('db.table.blog')." as b
                        WHERE 
                            t.topic_publish = 1 
                            AND t.blog_id=b.blog_id 
                            AND b.blog_type!='close' 
                            { AND t.topic_id < ?d }
                            AND ( 1=0 { OR t.blog_id IN (?a) } { OR t.user_id IN (?a) } )                                 
                        ORDER BY t.topic_id DESC    
                        { LIMIT 0, ?d }


Я нашел более изящное решение). Вот мой запрос:

SELECT 		
			    t.topic_id										
		        FROM 
			    ".Config::Get('db.table.topic')." as t,
			    ".Config::Get('db.table.blog')." as b
			WHERE 
			    t.topic_publish = 1 
			    AND t.blog_id=b.blog_id 
			    { AND t.topic_id < ?d }
			    AND ( false 
				{ OR t.blog_id IN (?a) } 
				{ OR (t.user_id IN (?a) AND b.blog_type='personal') }
			    )
 								
                        ORDER BY t.topic_id DESC	
                        { LIMIT 0, ?d }


Теперь стало получше:
— Показываем топики только из блогов на которые подписан пользователь;
— Показываем топики (из персональных блогов) пользователей, на которых подписан пользователь;

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