Yii: Вставка изображений в визуальном редакторе TinyMCE в шаблоне письма рассылки, чтобы был абсолютным URL путь.

Yii: Вставка изображений в визуальном редакторе TinyMCE в шаблоне письма рассылки, чтобы был абсолютным URL путь. При создании письма, которое будет разослано по email многим подписчикам, нужно у вставленных картинок указывать абсолютный путь к изображению на вашем сервере. Также необходимо обеспечить загрузку этих изображений в папку на сервере (если нет папки, то пусть она автоматически будет создаваться).

Будем использовать расширение EAjaxUpload. В функции загрузки нашего изображения вызовем метод createDirectory(...) - который проверяет, есть ли на сервере папка 'uploads' (или какую указываете в переменной $folder), и если её нет, то создаёт её.

...
Yii::import("ext.EAjaxUpload.qqFileUploader");
        $folder = 'files'.DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR;
        $this->createDirectory($_SERVER['DOCUMENT_ROOT'].Yii::app()->urlManager->baseUrl.DIRECTORY_SEPARATOR.$folder);
...

Саму же createDirectory поместим в protected/components/Controller.php

public function createDirectory($path) { 
   if (file_exists($path)) {  
       //echo "The directory {$path} exists";  
   } else {  
       mkdir($path, 0775);  
       //echo "The directory {$path} was successfully created.";  
   }
} 

Теперь осталось в настройках protected/components/TinyMceWidget.php в onComplete приписать к пути - Yii::app()->getBaseUrl(true), чтобы в редактор вставлялся абсолютный ауть к изображению, загруженному на сервер:

<?php

class TinyMceWidget extends CInputWidget
{    
    public $editorOptions = array();

    public $model;

    public $attribute;    

    public $uploadOptions = array();

    public function getUploadConfig($id)
    {
        return array(
            'action'=> Yii::app()->createUrl('site/upload'),
            'allowedExtensions'=>array(),//array("jpg","jpeg","gif","exe","mov" and etc...
            'sizeLimit'=>8*1024*1024,// maximum file size in bytes
            'onComplete'=>"js:function(id, fileName, responseJSON){ if (responseJSON.image) { $('#" . $id . "').tinymce().execCommand('mceInsertContent',false,'<img src=\"". Yii::app()->getBaseUrl(true) ."/files/uploads/' + responseJSON.filename + '\"/>'); } else { $('#" . $id . "').tinymce().execCommand('mceInsertContent',false,'<a href=\"". Yii::app()->getBaseUrl(true) ."/files/uploads/' + responseJSON.filename + '\">' + responseJSON.filename + '<a/>'); } }",
            'messages'=>array(
                             'typeError'=>"{file} has invalid extension. Only {extensions} are allowed.",
                             'sizeError'=>"{file} is too large, maximum file size is {sizeLimit}.",
                             'minSizeError'=>"{file} is too small, minimum file size is {minSizeLimit}.",
                             'emptyError'=>"{file} is empty, please select files again without it.",
                             'onLeave'=>"The files are being uploaded, if you leave now the upload will be cancelled."
                            ),
            'showMessage'=>"js:function(message){ alert(message); }"
        );
    }  
...
 
            

 

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.