WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Как установить и использовать редактор Trix в Laravel

461

При управлении веб-сайтом нам всегда нужен редактор форматированного текста (WYSIWYG). Если вы хотите добавить описательный контент, содержащий HTML, то единственный выбор – редактор WYSIWYG. Вы не можете добавить такой контент в текстовое поле. В Интернете доступно несколько редакторов форматированного текста, таких как TinyMCE, CKEditor. Trix Editor – один из них. Как разработчик, вы наверняка слышали о Basecamp. Редактор Trix используется в Basecamp для управления контентом. Этого достаточно, чтобы сказать о популярности редактора Trix.

В этой статье мы изучаем, как установить и использовать редактор Trix в Laravel. Мы также увидим, как загружать изображения в редактор Trix.

Установка Trix Editor

Чтобы начать работу с Trix, вам сначала нужно включить их файл JS и CSS. Вы можете найти эти файлы на их странице GitHub в каталоге dist. Скачать 2 файла trix.jsи trix.cssчто потребует в ближайшее время .

Поскольку нам нужно включить ресурсы, создайте папки js и css внутри общедоступного каталога вашего проекта Laravel. Поместите скопированные файлы JS и CSS в соответствующие каталоги.

Для загрузки изображений на сервер с помощью Trix необходимо добавить код JavaScript. Так что создайте attachments.jsфайл и храните его в public/jsпапке. Мы добавим код в этот файл в более поздней части руководства.

Добавьте следующий HTML-код в блейд-файл, который отобразит редактор Trix.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <link rel="stylesheet" href="{{ asset('/css/trix.css') }}">
</head>
<body>
    <form method="post" action={{ url('ROUTE_HERE') }}>
        {{ csrf_field() }}
        <p>
            <input id="x" type="hidden" name="content" value="" />
            <trix-editor input="x"></trix-editor>
        </p>
        <input type="submit" name="submit" value="Submit" />
    </form>
     
    <script src="{{ asset('js/trix.js') }}"></script>
    <script src="{{ asset('js/attachments.js') }}"></script>
</body>
</html>

Приведенный выше HTML-код отобразит Trix на вашей веб-странице, как показано на снимке экрана ниже.

Обратите внимание, мы помещаем редактор Trix в HTML с помощью trix-editorтега. Скрытое поле с именем «контент» используется для получения или отображения контента в Trix Editor. Когда мы вводим что-либо внутри Trix, в это скрытое поле устанавливается тот же контент. На стороне сервера мы получим содержимое редактора Trix, используя приведенную ниже инструкцию.

echo $request->input('content');

Таким же образом, если вы хотите отображать предварительно заполненное содержимое в Trix, установите значение в скрытом поле следующим образом.

<input id="x" type="hidden" name="content" value="<h1>This is content</h1>" />

Загрузить изображение в Trix Editor

Если вы хотите использовать изображения в контенте, то, конечно, вам необходимо загрузить изображение на сервер. В редакторе Trix есть событие, trix-attachment-addс помощью которого мы будем загружать изображение через Ajax. Определим для него маршрут.

Route::post('upload', 'ProductController@upload');

Измените имя контроллера в маршруте. В методе загрузки контроллера напишите код следующим образом.

public function upload(Request $request)
{
    if($request->hasFile('file')) {
        //get filename with extension
        $filenamewithextension = $request->file('file')->getClientOriginalName();
  
        //get filename without extension
        $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
  
        //get file extension
        $extension = $request->file('file')->getClientOriginalExtension();
  
        //filename to store
        $filenametostore = $filename.'_'.time().'.'.$extension;
  
        //Upload File
        $request->file('file')->storeAs('public/uploads', $filenametostore);
  
        // you can save image path below in database
        $path = asset('storage/uploads/'.$filenametostore);
 
        echo $path;
        exit;
    }
}

Здесь я храню изображения в public/uploadsпапке. Возможно, вам потребуется создать символическую ссылку на папку хранилища с помощью команды:

php artisan storage:link

Мы создали attachments.jsфайл, который будет использоваться для вызова Ajax при событии trix-attachment-add. Добавьте в attachments.jsфайл приведенный ниже код .

(function() {
    var HOST = "http://localhost:8000/upload"; //pass the route
  
    addEventListener("trix-attachment-add", function(event) {
        if (event.attachment.file) {
            uploadFileAttachment(event.attachment)
        }
    })
  
    function uploadFileAttachment(attachment) {
        uploadFile(attachment.file, setProgress, setAttributes)
  
        function setProgress(progress) {
            attachment.setUploadProgress(progress)
        }
  
        function setAttributes(attributes) {
            attachment.setAttributes(attributes)
        }
    }
  
    function uploadFile(file, progressCallback, successCallback) {
        var formData = createFormData(file);
        var xhr = new XMLHttpRequest();
         
        xhr.open("POST", HOST, true);
        xhr.setRequestHeader( 'X-CSRF-TOKEN', getMeta( 'csrf-token') );
  
        xhr.upload.addEventListener("progress", function(event) {
            var progress = event.loaded / event.total * 100
            progressCallback(progress)
        })
  
        xhr.addEventListener("load", function(event) {
            var attributes = {
                url: xhr.responseText,
                href: xhr.responseText + "?content-disposition=attachment"
            }
            successCallback(attributes)
        })
  
        xhr.send(formData)
    }
  
    function createFormData(file) {
        var data = new FormData()
        data.append("Content-Type", file.type)
        data.append("file", file)
        return data
    }
 
    function getMeta(metaName) {
        const metas = document.getElementsByTagName('meta');
       
        for (let i = 0; i < metas.length; i++) {
          if (metas[i].getAttribute('name') === metaName) {
            return metas[i].getAttribute('content');
          }
        }
       
        return '';
      }
})();

В приведенном выше коде вы должны передать маршрут HOSTпеременной. Laravel требует токен CSRF в каждом запросе. Мы получаем этот токен CSRF из метатега HTML, который мы добавили в файл лезвия. Когда вы добавляете изображение в Trix, он вызывает вызов Ajax, загружает изображение на сервер и возвращает путь к загруженному изображению.

Надеюсь, вы понимаете, как установить и использовать редактор Trix в Laravel. Пожалуйста, поделитесь своими мыслями и предложениями в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее