{"id":25543,"date":"2021-06-09T18:17:00","date_gmt":"2021-06-09T15:17:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25543"},"modified":"2021-10-18T02:32:54","modified_gmt":"2021-10-17T23:32:54","slug":"so-installieren-und-verwenden-sie-den-trix-editor-in-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/so-installieren-und-verwenden-sie-den-trix-editor-in-laravel\/","title":{"rendered":"So installieren und verwenden Sie den Trix-Editor in Laravel"},"content":{"rendered":"<p>Bei der Verwaltung einer Website ben\u00f6tigen wir immer einen Rich-Text-Editor (WYSIWYG). Wenn Sie beschreibenden Inhalt hinzuf\u00fcgen m\u00f6chten, der HTML enth\u00e4lt, ist der WYSIWYG-Editor die einzige Wahl. Sie k\u00f6nnen solche Inhalte nicht in den Textbereich einf\u00fcgen. Es gibt mehrere Rich-Text-Editoren wie <a href=\"https:\/\/themewp.inform.click\/de\/so-installieren-und-verwenden-sie-den-tinymce-editor-in-laravel\/\" title=\"TinyMCE\" >TinyMCE<\/a>, <a href=\"https:\/\/themewp.inform.click\/de\/so-installieren-und-verwenden-sie-ckeditor-in-laravel\/\" title=\"CKEditor,\" >CKEditor,<\/a> die im Internet verf\u00fcgbar sind. <a href=\"https:\/\/trix-editor.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Trix Editor<\/a> ist einer davon. Als Entwickler m\u00fcssen Sie von Basecamp geh\u00f6rt haben. Der Trix-Editor wird in Basecamp zum Verwalten von Inhalten verwendet. Dies ist genug, um \u00fcber die Popularit\u00e4t des Trix-Editors zu sagen.<\/p>\n<p>In diesem Artikel untersuchen wir, wie Sie den Trix-Editor in Laravel installieren und verwenden. Wir werden auch sehen, wie Sie Bilder im Trix-Editor hochladen.<\/p>\n<h3>Installation des Trix-Editors<\/h3>\n<p>Um mit Trix zu beginnen, m\u00fcssen Sie zun\u00e4chst die JS- und CSS-Datei einbinden. Sie finden diese Dateien auf ihrer <a href=\"https:\/\/github.com\/basecamp\/trix\/tree\/master\/dist\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GitHub-Seite unter dem Verzeichnis dist<\/a>. Laden Sie 2 Dateien herunter <code>trix.js<\/code>und <code>trix.css<\/code>die werden bald ben\u00f6tigt.<\/p>\n<p>Da wir Assets einschlie\u00dfen m\u00fcssen, erstellen Sie einen &#8218;js&#8216;- und &#8218;css&#8216;-Ordner im \u00f6ffentlichen Verzeichnis Ihres Laravel-Projekts. Legen Sie die kopierten JS- und CSS-Dateien in die entsprechenden Verzeichnisse.<\/p>\n<p>F\u00fcr das Hochladen von Bildern auf den Server mit Trix m\u00fcssen Sie JavaScript-Code hinzuf\u00fcgen. Erstellen Sie also eine <code>attachments.js<\/code>Datei und bewahren Sie sie im <code>public\/js<\/code>Ordner auf. Wir werden dieser Datei im sp\u00e4teren Teil des Tutorials Code hinzuf\u00fcgen.<\/p>\n<p>F\u00fcgen Sie der Blade-Datei den folgenden HTML-Code hinzu, der den Trix-Editor anzeigt.<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta name=\"csrf-token\" content=\"{{ csrf_token() }}\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;link rel=\"stylesheet\" href=\"{{ asset('\/css\/trix.css') }}\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;form method=\"post\" action={{ url('ROUTE_HERE') }}&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"x\" type=\"hidden\" name=\"content\" value=\"\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;trix-editor input=\"x\"&gt;&lt;\/trix-editor&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Submit\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;script src=\"{{ asset('js\/trix.js') }}\"&gt;&lt;\/script&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;script src=\"{{ asset('js\/attachments.js') }}\"&gt;&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Der obige HTML-Code zeigt die Trix auf Ihrer Webseite an, wie im Screenshot unten gezeigt.<\/p>\n<p>Beachten Sie, dass wir den Trix-Editor mithilfe des <code>trix-editor<\/code>Tags in HTML platzieren. Das versteckte Feld mit dem Namen &#8218;content&#8216; dient zum Abrufen oder Anzeigen von Inhalten im Trix Editor. Wenn wir etwas in Trix eingeben, wird derselbe Inhalt in dieses versteckte Feld gesetzt. Serverseitig erhalten wir den Inhalt des Trix-Editors mit der folgenden Anweisung.<\/p>\n<pre><code>echo $request-&gt;input('content');<\/code><\/pre>\n<p>Wenn Sie in Trix vorausgef\u00fcllte Inhalte anzeigen m\u00f6chten, setzen Sie den Wert auf das ausgeblendete Feld analog wie folgt.<\/p>\n<pre><code>&lt;input id=\"x\" type=\"hidden\" name=\"content\" value=\"&lt;h1&gt;This is content&lt;\/h1&gt;\" \/&gt;<\/code><\/pre>\n<h3>Bild im Trix Editor hochladen<\/h3>\n<p>Wenn Sie Bilder im Inhalt verwenden m\u00f6chten, m\u00fcssen Sie das Bild nat\u00fcrlich auf den Server hochladen. Der Trix-Editor bietet ein Ereignis, <code>trix-attachment-add<\/code>mit dem wir das Bild \u00fcber Ajax hochladen. Lassen Sie uns eine Route daf\u00fcr definieren.<\/p>\n<pre><code>Route::post('upload', 'ProductController@upload');<\/code><\/pre>\n<p>Passen Sie den Controller-Namen in der Route an. Schreiben Sie in der Upload-Methode von Controller den Code wie folgt.<\/p>\n<pre><code>public function upload(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if($request-&gt;hasFile('file')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename with extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenamewithextension = $request-&gt;file('file')-&gt;getClientOriginalName();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename without extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get file extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = $request-&gt;file('file')-&gt;getClientOriginalExtension();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/filename to store\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenametostore = $filename.'_'.time().'.'.$extension;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Upload File\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('file')-&gt;storeAs('public\/uploads', $filenametostore);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ you can save image path below in database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$path = asset('storage\/uploads\/'.$filenametostore);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $path;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exit;\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Hier speichere ich Bilder unter dem <code>public\/uploads<\/code>Ordner. M\u00f6glicherweise m\u00fcssen Sie mit dem folgenden Befehl einen symbolischen Link zum Speicherordner erstellen:<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>Wir haben eine <code>attachments.js<\/code>Datei erstellt, die verwendet wird, um einen Ajax-Aufruf f\u00fcr das Ereignis zu t\u00e4tigen <code>trix-attachment-add<\/code>. F\u00fcgen Sie den folgenden Code in die <code>attachments.js<\/code>Datei ein.<\/p>\n<pre><code>(function() {\n\u00a0\u00a0\u00a0\u00a0var HOST = \"http:\/\/localhost:8000\/upload\"; \/\/pass the route\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0addEventListener(\"trix-attachment-add\", function(event) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (event.attachment.file) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0uploadFileAttachment(event.attachment)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0})\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0function uploadFileAttachment(attachment) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0uploadFile(attachment.file, setProgress, setAttributes)\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0function setProgress(progress) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attachment.setUploadProgress(progress)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0function setAttributes(attributes) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0attachment.setAttributes(attributes)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0function uploadFile(file, progressCallback, successCallback) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var formData = createFormData(file);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var xhr = new XMLHttpRequest();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xhr.open(\"POST\", HOST, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xhr.setRequestHeader( 'X-CSRF-TOKEN', getMeta( 'csrf-token') );\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xhr.upload.addEventListener(\"progress\", function(event) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var progress = event.loaded \/ event.total * 100\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0progressCallback(progress)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0})\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xhr.addEventListener(\"load\", function(event) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var attributes = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0url: xhr.responseText,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0href: xhr.responseText + \"?content-disposition=attachment\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0successCallback(attributes)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0})\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xhr.send(formData)\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0function createFormData(file) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var data = new FormData()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data.append(\"Content-Type\", file.type)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data.append(\"file\", file)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return data\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0function getMeta(metaName) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const metas = document.getElementsByTagName('meta');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for (let i = 0; i &lt; metas.length; i++) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (metas[i].getAttribute('name') === metaName) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return metas[i].getAttribute('content');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return '';\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n})();<\/code><\/pre>\n<p>Im obigen Code sollten Sie die Route an eine <code>HOST<\/code>Variable \u00fcbergeben. Laravel ben\u00f6tigt in jeder Anfrage ein CSRF-Token. Dieses CSRF-Token erhalten wir aus dem HTML-Meta-Tag, das wir in der Blade-Datei hinzugef\u00fcgt haben. Wenn Sie das Bild in Trix hinzuf\u00fcgen, gibt es einen Ajax-Aufruf, l\u00e4dt das Bild auf den Server hoch und gibt den Pfad des hochgeladenen Bildes zur\u00fcck.<\/p>\n<p>Ich hoffe, Sie verstehen, wie Sie den Trix-Editor in Laravel installieren und verwenden. Bitte teilen Sie Ihre Gedanken und Vorschl\u00e4ge im Kommentarbereich unten mit.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-installieren-und-verwenden-sie-ckeditor-in-laravel\/\" title=\"So installieren und verwenden Sie CKEditor in Laravel\">So installieren und verwenden Sie CKEditor in Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-installieren-und-verwenden-sie-den-tinymce-editor-in-laravel\/\" title=\"So installieren und verwenden Sie den TinyMCE-Editor in Laravel\">So installieren und verwenden Sie den TinyMCE-Editor in Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/bildgrose-in-laravel-mithilfe-der-interventions-bildbibliothek-andern\/\" title=\"Bildgr\u00f6\u00dfe in Laravel mithilfe der Interventions-Bildbibliothek \u00e4ndern\">Bildgr\u00f6\u00dfe in Laravel mithilfe der Interventions-Bildbibliothek \u00e4ndern<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>M\u00f6chten Sie den Trix-Editor in Laravel integrieren? In diesem Artikel untersuchen wir, wie Sie den Trix-Editor in Laravel installieren und verwenden. Wir sehen auch Bild<\/p>\n","protected":false},"author":1,"featured_media":20291,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[496],"tags":[845],"class_list":["post-25543","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/25543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/comments?post=25543"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/25543\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/20291"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=25543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=25543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=25543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}