Mini CMS für Mobirise

Anwendungen für Webseiten. Künstliche Intelligenz verwenden.
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

Volker hat geschrieben: Di 21. Okt 2025, 21:01 Ich hab dem Tinymce jetzt noch eine Option eingepflanzt :D

Man kann auch Modals damit machen - per Klick :D

Und das wird auch in Mobirse 100% angezeigt. Ist auf meiner Startseite unter dem Video klick hier

Wenn das nicht Geil ist weiß ich auch nicht :D



Moin Volker,

Du hast in Deinem letzten Beitrag gar keinen Link gesetzt. Auch hast Du nun auf Deiner Webseite zwar einen Link zum "Mini CMS" unter "PHP - Mobirise - Generatoren" gesetzt - aber auch der ist falsch und leitet zur Seite vom "Drei Spalten Block".

Wenn Du nun die Möglichkeit zur Erstellung eines Popup-Modal im TinyMCE Editor anbietest, was genau muss dann an den existierenden Dateien neu hochgeladen werden (das gesamte Verzeichnis vom "tinymce"?) und worauf muss ich achten, dass nicht alles neu gemacht werden muss? Oder ist das dann nur ein zusätzliches JavaScript für das TinyMCE?





Übrigens: Die TinyMCE „Galerie“ für Bilder funktioniert überhaupt nicht.

Hast du da etwas vergessen? Ich kenne mich mit der TinyMCE‑Konfiguration nicht aus – so wie es jetzt ist, kann diese Option aber auch weg. Man kann die kleinen Bilder einzeln hochladen und nebeneinander platzieren, dann alle markieren und über den Button „Galerie“ Position und Abstand einstellen. Nach dem Speichern ist jedoch alles wieder weg.

Ich halte diese Option ohnehin für überflüssig, ebenso ein Popup. Was mir in deiner TinyMCE‑Konfiguration fehlt, ist der Video Button, wie er z. B. im Screenshot des TinyMCE von „PHP Jabbers“ zu sehen ist:

TinyMCE-Jabbers.jpg


Auch eine feghlende und sehr brauchbare Option sind Tabellen, denn die sind ja in Mobirise nicht so einfach zu erstellen.

Wie und wo wird denn das überhaupt eingestellt, was da an Optionen (Buttons) im TinyMCE angezeigt wird?
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

Habe alles gefunden und entsprechend auch gleich noch einen zweiten CMS-Bereich auf meiner Beispielseite eingebunden, der ein mit dem CMS erstelltes Video anzeigt:

https://www.mobirise-tutorials.com/Tuto ... #CMS-Video


Habe das Script:

tinymce.init

... in der Datei "dashboard.php" finden und ändern können:

Code: Alles auswählen

<script>
tinymce.init({
  selector: 'textarea#content',
  height: 600,
  menubar: true,
  promotion: false, // entfernt den "Get all features" / Upgrade-Button in der Menüleiste
  branding: false, // blendet "Powered by Tiny" im Statusbalken aus

  // + Vorschau-Plugin (preview) ergänzt
  // (Media & Table hattest du schon – ich lasse sie drin)
  plugins: 'link image code lists emoticons textcolor media table preview', // + preview

  // + Vorschau-Button in die Toolbar aufgenommen
  //   Galerie-Button weiterhin auskommentiert (nicht gelöscht)
  toolbar: [
    'undo redo | fontfamily | styleselect fontselect | fontsizeinput | fontsizeselect bold italic underline | emoticons',
    'alignleft aligncenter alignright | bullist numlist | forecolor backcolor | link image media table | preview | code | bordercolorbutton', // + preview
    // 'gallerybutton', // (ausgeblendet, aber weiterhin registriert)
  ].join(' '),

  language: 'de',
  relative_urls: false,
  remove_script_host: false,

  automatic_uploads: true,
  images_upload_url: 'upload_image.php',
  file_picker_types: 'image',
  images_upload_credentials: true,

  image_advtab: true,
  valid_elements: '*[*]',
  // + iframes für Media-Einbettungen (YouTube/Vimeo etc.) zugelassen
  extended_valid_elements:
    'img[class|src|alt|title|width|height|style|data-*],a[href|target|title|class|style],div[class|style],span[class|style],iframe[src|frameborder|allowfullscreen|width|height|style]', // + iframe

  // + Live-Preview von eingebetteten Medien aktivieren
  media_live_embeds: true, // + neu

  // (Optional) Wenn die Vorschau so aussehen soll wie deine Website,
  // kannst du deine Frontend-CSS einbinden:
  // content_css: ['/css/site.css'], // + optional

  file_picker_callback: function (cb, value, meta) {
    if (meta.filetype === 'image') {
      var input = document.createElement('input');
      input.type = 'file';
      input.accept = 'image/*';
      input.onchange = function () {
        var file = this.files[0];
        var formData = new FormData();
        formData.append('file', file);
        fetch('upload_image.php', { method: 'POST', body: formData })
          .then(r => r.json())
          .then(data => cb(data.location))
          .catch(err => alert('Upload-Fehler: ' + err));
      };
      input.click();
    }
  },

  content_style: `
    img { max-width: 100%; height: auto; border-radius: 6px; }
    .left { float: left; margin: 0 10px 10px 0; }
    .right { float: right; margin: 0 0 10px 10px; }
    .center { display: block; margin: 0 auto 10px auto; }
    .shadow { box-shadow: 0 2px 8px rgba(0,0,0,0.3); }
    .rounded { border-radius: 10px; }
    .image-row { display: flex; flex-wrap: wrap; justify-content: center; }
    .image-row img { width: 100%; height: auto; border-radius: 6px; }
  `,

  style_formats: [
    { title: 'Bild links', selector: 'img', classes: 'left' },
    { title: 'Bild rechts', selector: 'img', classes: 'right' },
    { title: 'Bild zentriert', selector: 'img', classes: 'center' },
    { title: 'Abgerundet', selector: 'img', classes: 'rounded' },
    { title: 'Schatten', selector: 'img', classes: 'shadow' }
  ],

  setup: function (editor) {
    // Galerie-Button bleibt registriert, ist aber in der Toolbar auskommentiert
    editor.ui.registry.addButton('gallerybutton', {
      text: '📷 Galerie',
      tooltip: 'Mehrere Bilder nebeneinander anordnen',
      onAction: function () {
        const selected = editor.selection.getContent({ format: 'html' });
        if (!selected || !selected.includes('<img')) {
          alert('Bitte wähle mehrere Bilder aus oder füge sie zuerst ein.');
          return;
        }
        const columns = prompt('Wie viele Spalten möchtest du? (z. B. 2, 3, 4)', '3');
        const gap = prompt('Welchen Abstand zwischen den Bildern (in Pixel)?', '10');
        if (!columns || isNaN(columns)) return alert('Ungültige Spaltenzahl!');
        if (!gap || isNaN(gap)) return alert('Ungültiger Abstand!');
        const wrapped = `
          <div class="image-row" style="gap:${gap}px;">
            ${selected}
          </div>
          <style>
            .image-row a, .image-row img {
              flex: 1 1 calc(${100 / columns}% - ${gap}px);
              max-width: calc(${100 / columns}% - ${gap}px);
            }
            @media(max-width:768px){
              .image-row a, .image-row img { flex-basis: calc(50% - ${gap}px); max-width: calc(50% - ${gap}px); }
            }
            @media(max-width:480px){
              .image-row a, .image-row img { flex-basis: 100%; max-width: 100%; }
            }
          </style><p></p>`;
        editor.selection.setContent(wrapped);
      }
    });

    // Farbbutton
    editor.ui.registry.addButton('bordercolorbutton', {
      text: '🎨 Rahmenfarbe',
      tooltip: 'Rahmenfarbe für ausgewähltes Bild setzen',
      onAction: function () {
        const node = editor.selection.getNode();
        if (node.nodeName !== 'IMG') {
          alert('Bitte zuerst ein Bild auswählen.');
          return;
        }
        const picker = document.createElement('input');
        picker.type = 'color';
        picker.style.position = 'fixed';
        picker.style.zIndex = 99999;
        picker.style.left = '50%';
        picker.style.top = '50%';
        picker.style.transform = 'translate(-50%, -50%)';
        picker.style.width = '100px';
        picker.style.height = '60px';
        document.body.appendChild(picker);
        picker.addEventListener('input', function () {
          const color = this.value;
          let currentStyle = node.getAttribute('style') || '';
          currentStyle = currentStyle.replace(/border:[^;]+;?/gi, '');
          node.setAttribute('style', currentStyle + `border: 4px solid ${color};`);
        });
        picker.addEventListener('blur', function () { document.body.removeChild(picker); });
        picker.focus();
      }
    });
  }
});
</script>


Habe jetzt noch die Menübar aktiviert und die Schaltfläche "Galerie" deaktiviert und dafür noch hinzugefügt:

Media (Videos aller Art) → TabelleVorschau (aktive Seite in Vorschau)


Dashboard mit anderen Buttons.png
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Mini CMS für Mobirise

Beitrag von Volker »

Prima Tommy,

Werde ich auch so einbauen. Links bei mir stimmen noch nicht hatte gestern keine lust mehr, weil müde 😫

Modal ist nur mit extra Java Script möglich. Lass ich raus. Ich muss halt auch immer gucken wie es mit dem tiny geht.
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

Wenn Du das Skript bearbeitest, dann gucke nochmals mein Skript einen Beitrag höher an. Ich habe da noch die Werbung und das Branding vom TinyMCE ausgeblendet.

Die "Vorschau" ist ein ganz wichtiger Button.

Das sieht jetzt bei mir so aus:

CMS-Dashboard.png
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Mini CMS für Mobirise

Beitrag von Volker »

Ich nehme deinen Code von oben komplett.ist heute abend dann im zip
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

Tipp zum CMS:

Man kann die Lightbox, so wie diese mit dem JavaScript integriert wurde, natürlich auch für unendlich große Bildergalerien missbrauchen:

https://www.mobirise-tutorials.com/Tuto ... ox-Galerie

... indem man z.B. nur ein oder einige Bilder anzeigt und die anderen Bilder hinter der Lightbox versteckt. Hier mit meiner class="hide":

Source-Code TinyMCE.jpg

Code: Alles auswählen

<p><img src="https://www.mobirise-tutorials.com/Tutorials-4/uploads/Malediven.jpg" alt="Lightbox-Galerie" title="Lightbox-Galerie" width="1600" height="800"></p>
<div class="hide">
<p><img src="https://www.mobirise-tutorials.com/Tutorials-4/uploads/bild02.jpg" alt="" width="1600" height="800"></p>
<p><img src="https://www.mobirise-tutorials.com/Tutorials-4/uploads/bild03.jpg" alt="" width="1600" height="800"></p>
<p><img src="https://www.mobirise-tutorials.com/Tutorials-4/uploads/bild04.jpg" alt="" width="1600" height="800"></p>
<p></p>
</div>


Diese Bilder wurden alle mit dem TinyMCE in das CMS-Verzeichnis Upload ganz normal hochgeladen.

Im Mobirise-Block habe ich dann meine class="hide" in den Bereich "CSS Editor" geschrieben und fertig:

Code: Alles auswählen

.hide {
  display: none !important;
}
Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Mini CMS für Mobirise

Beitrag von Volker »

So Tommy,
ich hab jetzt Deinen überarbeiteten Code im Zip liegen.

Jetzt sollte jeder damit klar kommen :D

Links ändere ich nach meinem Mittagsschlaf :cool:
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

:tu:

geprüft und OK
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

Ich habe hier ein neues Skript in JavaScript entwickelt, das in der Lightbox ("GLitebox") nur die Bilder aus demselben Block anzeigt und zusätzlich deren ALT-Text als Beschriftung verwendet (kein ALT → keine Beschriftung), denn eine Beschriftung kann manchmal erforderlich sein um Bilder besser zu kennzeichnen.

Das Originalskript zeigte zwar alle Bilder an, jedoch immer nur im letzten CMS-Block - also nicht ganz korrekt.

Außerdem wollte ich in einer bestimmten Galerie der Lightbox, wie z.B. meiner versteckten Galerie, dann keine Bilder aus anderen Blöcken sehen.

Ich finde es macht mehr Sinn immer nur die Bilder aus einem Block in der Lightbox zu zeigen und nicht alle Bilder der gesamten Seite, die vielleicht völlig andere Themen betreffen. Zeige ich z.B. als Fotograf meine besten Hochzeitsfotos in einem Block, will ich ich nicht zusätzlich Fotos einer Beerdigung aus einem anderen Block in der gleichen Lightbox-Galerie sehen :eek:

Gerade für Fotografen sollte das ja enorm wichtig sein, unterschiedliche Themenbereiche optisch zu trennen.

Das neue JavaScript für die Lightbox steht auf meiner Seite und hat stundenlange Arbeit bereitet, das Problem war auch die Ansicht am Handy:

https://www.mobirise-tutorials.com/Tutorials-4/CMS.html

Außerdem habe ich eine optionale CSS erstellt, mit der ihr die Lightbox flexibler gestalten könnt – zum Beispiel mit runden Ecken für die Bilder, wie in meinem Beispiel oder eben anders positionieren, damit diese nicht mehr am oberen Bildschirmrand klebt, wie vorher.

Das sah vorher einfach schrecklich aus :eek:

Der CSS-Code ist komplett optional.
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

Volker,

ich habe das Script zur Initialisierung vom TinyMCE Editor nochmals überarbeitet, denn es fehlte die Möglichkeit mehrere Bilder gleichzeitig hochzuladen, was jetzt über den Button und auch das Menü funktioniert.

Das solltest Du vielleicht auch noch in der ZIP zum Download der Anwendung anpassen, denn für größere Galerien ist das Hochladen einzelner Bilder sonst sehr umständlich.


Hier das neue Script (einfach in der Datei 'dashboard.php' tauschen):

Code: Alles auswählen

<script>
tinymce.init({
  selector: 'textarea#content',
  height: 600,
  menubar: true,
  promotion: false, // entfernt den "Get all features" / Upgrade-Button in der Menüleiste
  branding: false, // blendet "Powered by Tiny" im Statusbalken aus

  // + Vorschau-Plugin (preview) ergänzt
  // (Media & Table hattest du schon – ich lasse sie drin)
  plugins: 'link image code lists emoticons textcolor media table preview', // + preview

  // + Vorschau-Button in die Toolbar aufgenommen
  //   Galerie-Button weiterhin auskommentiert (nicht gelöscht)
  toolbar: [
    'undo redo | fontfamily | styleselect fontselect | fontsizeinput | fontsizeselect bold italic underline | emoticons',
    'alignleft aligncenter alignright | bullist numlist | forecolor backcolor | link image media table | preview | code | bordercolorbutton', // + preview
    // 'gallerybutton', // (ausgeblendet, aber weiterhin registriert)
  ].join(' '),

  language: 'de',
  relative_urls: false,
  remove_script_host: false,

  automatic_uploads: true,
  images_upload_url: 'upload_image.php',
  file_picker_types: 'image',
  images_upload_credentials: true,

  image_advtab: true,
  valid_elements: '*[*]',
  // + iframes für Media-Einbettungen (YouTube/Vimeo etc.) zugelassen
  extended_valid_elements:
    'img[class|src|alt|title|width|height|style|data-*],a[href|target|title|class|style],div[class|style],span[class|style],iframe[src|frameborder|allowfullscreen|width|height|style]', // + iframe

  // + Live-Preview von eingebetteten Medien aktivieren
  media_live_embeds: true, // + neu

  // (Optional) Wenn die Vorschau so aussehen soll wie deine Website,
  // kannst du deine Frontend-CSS einbinden:
  // content_css: ['/css/site.css'], // + optional

  // + Mehrfach-Upload für Bilder:
  //   - Datei-Dialog erlaubt mehrere Bilder (input.multiple = true)
  //   - Alle Bilder werden hochgeladen und nacheinander im Editor eingefügt
  //   Hinweis: Der Image-Dialog hat nur ein Quellenfeld; bei Mehrfachauswahl fügen wir direkt in den Editor ein.
  file_picker_callback: function (cb, value, meta) {
    if (meta.filetype === 'image') {
      var input = document.createElement('input');
      input.type = 'file';
      input.accept = 'image/*';
      input.multiple = true; // + Mehrfachauswahl erlauben
      input.onchange = function () {
        var files = Array.from(this.files || []);
        if (!files.length) return;

        // Hilfsfunktion: einzelnes Bild hochladen -> URL zurückgeben
        var uploadOne = function (file) {
          var formData = new FormData();
          formData.append('file', file);
          return fetch('upload_image.php', { method: 'POST', body: formData, credentials: 'include' }) // + Credentials mitgeben wie oben konfiguriert
            .then(function (r) { return r.json(); })
            .then(function (data) {
              if (!data || !data.location) throw new Error('Antwort ohne URL');
              return data.location;
            });
        };

        // Alle Dateien hochladen
        Promise.all(files.map(uploadOne))
          .then(function (urls) {
            if (urls.length === 1) {
              // Standardverhalten für Einzelbild beibehalten
              cb(urls[0]); // setzt die Quelle im Image-Dialog
            } else {
              // Bei Mehrfachauswahl direkt Inhalte einfügen
              var ed = tinymce.activeEditor; // + aktuelle Editorinstanz
              urls.forEach(function (u) {
                ed.insertContent('<p><img src="' + u + '" alt="" /></p>'); // + jedes Bild separat einfügen
              });
              // Optional: Dialog schließen (falls geöffnet)
              // tinymce.activeEditor.windowManager.close(); // nur aktivieren, wenn gewünscht
            }
          })
          .catch(function (err) {
            alert('Upload-Fehler: ' + err);
          });
      };
      input.click();
    }
  },

  content_style: `
    img { max-width: 100%; height: auto; border-radius: 6px; }
    .left { float: left; margin: 0 10px 10px 0; }
    .right { float: right; margin: 0 0 10px 10px; }
    .center { display: block; margin: 0 auto 10px auto; }
    .shadow { box-shadow: 0 2px 8px rgba(0,0,0,0.3); }
    .rounded { border-radius: 10px; }
    .image-row { display: flex; flex-wrap: wrap; justify-content: center; }
    .image-row img { width: 100%; height: auto; border-radius: 6px; }
  `,

  style_formats: [
    { title: 'Bild links', selector: 'img', classes: 'left' },
    { title: 'Bild rechts', selector: 'img', classes: 'right' },
    { title: 'Bild zentriert', selector: 'img', classes: 'center' },
    { title: 'Abgerundet', selector: 'img', classes: 'rounded' },
    { title: 'Schatten', selector: 'img', classes: 'shadow' }
  ],

  setup: function (editor) {
    // Galerie-Button bleibt registriert, ist aber in der Toolbar auskommentiert
    editor.ui.registry.addButton('gallerybutton', {
      text: '📷 Galerie',
      tooltip: 'Mehrere Bilder nebeneinander anordnen',
      onAction: function () {
        const selected = editor.selection.getContent({ format: 'html' });
        if (!selected || !selected.includes('<img')) {
          alert('Bitte wähle mehrere Bilder aus oder füge sie zuerst ein.');
          return;
        }
        const columns = prompt('Wie viele Spalten möchtest du? (z. B. 2, 3, 4)', '3');
        const gap = prompt('Welchen Abstand zwischen den Bildern (in Pixel)?', '10');
        if (!columns || isNaN(columns)) return alert('Ungültige Spaltenzahl!');
        if (!gap || isNaN(gap)) return alert('Ungültiger Abstand!');
        const wrapped = `
          <div class="image-row" style="gap:${gap}px;">
            ${selected}
          </div>
          <style>
            .image-row a, .image-row img {
              flex: 1 1 calc(${100 / columns}% - ${gap}px);
              max-width: calc(${100 / columns}% - ${gap}px);
            }
            @media(max-width:768px){
              .image-row a, .image-row img { flex-basis: calc(50% - ${gap}px); max-width: calc(50% - ${gap}px); }
            }
            @media(max-width:480px){
              .image-row a, .image-row img { flex-basis: 100%; max-width: 100%; }
            }
          </style><p></p>`;
        editor.selection.setContent(wrapped);
      }
    });

    // Farbbutton
    editor.ui.registry.addButton('bordercolorbutton', {
      text: '🎨 Rahmenfarbe',
      tooltip: 'Rahmenfarbe für ausgewähltes Bild setzen',
      onAction: function () {
        const node = editor.selection.getNode();
        if (node.nodeName !== 'IMG') {
          alert('Bitte zuerst ein Bild auswählen.');
          return;
        }
        const picker = document.createElement('input');
        picker.type = 'color';
        picker.style.position = 'fixed';
        picker.style.zIndex = 99999;
        picker.style.left = '50%';
        picker.style.top = '50%';
        picker.style.transform = 'translate(-50%, -50%)';
        picker.style.width = '100px';
        picker.style.height = '60px';
        document.body.appendChild(picker);
        picker.addEventListener('input', function () {
          const color = this.value;
          let currentStyle = node.getAttribute('style') || '';
          currentStyle = currentStyle.replace(/border:[^;]+;?/gi, '');
          node.setAttribute('style', currentStyle + `border: 4px solid ${color};`);
        });
        picker.addEventListener('blur', function () { document.body.removeChild(picker); });
        picker.focus();
      }
    });
  }
});
</script>


Volker
Moderator
Moderator
Beiträge: 1678
Registriert: Sa 12. Dez 2020, 22:35

Re: Mini CMS für Mobirise

Beitrag von Volker »

Ist im Download, allerdings sehe ich da nicht die Möglichkeit da mehr bilder hochzuladen :confused:
Wo finde ich die ?
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

Na Du wählst genau den gleichen Button für Bilder - nur kannst Du jetzt mit der Maus beliebig viele markieren und gleichzeitig hochladen. Vorher konnte man immer nur ein Bild hochladen.

Diese Routine ist hinzugekommen (für den gleichen Button):

Code: Alles auswählen

  // + Mehrfach-Upload für Bilder:
  //   - Datei-Dialog erlaubt mehrere Bilder (input.multiple = true)
  //   - Alle Bilder werden hochgeladen und nacheinander im Editor eingefügt
  //   Hinweis: Der Image-Dialog hat nur ein Quellenfeld; bei Mehrfachauswahl fügen wir direkt in den Editor ein.
  file_picker_callback: function (cb, value, meta) {
    if (meta.filetype === 'image') {
      var input = document.createElement('input');
      input.type = 'file';
      input.accept = 'image/*';
      input.multiple = true; // + Mehrfachauswahl erlauben
      input.onchange = function () {
        var files = Array.from(this.files || []);
        if (!files.length) return;

        // Hilfsfunktion: einzelnes Bild hochladen -> URL zurückgeben
        var uploadOne = function (file) {
          var formData = new FormData();
          formData.append('file', file);
          return fetch('upload_image.php', { method: 'POST', body: formData, credentials: 'include' }) // + Credentials mitgeben wie oben konfiguriert
            .then(function (r) { return r.json(); })
            .then(function (data) {
              if (!data || !data.location) throw new Error('Antwort ohne URL');
              return data.location;
            });
        };

        // Alle Dateien hochladen
        Promise.all(files.map(uploadOne))
          .then(function (urls) {
            if (urls.length === 1) {
              // Standardverhalten für Einzelbild beibehalten
              cb(urls[0]); // setzt die Quelle im Image-Dialog
            } else {
              // Bei Mehrfachauswahl direkt Inhalte einfügen
              var ed = tinymce.activeEditor; // + aktuelle Editorinstanz
              urls.forEach(function (u) {
                ed.insertContent('<p><img src="' + u + '" alt="" /></p>'); // + jedes Bild separat einfügen
              });
              // Optional: Dialog schließen (falls geöffnet)
              // tinymce.activeEditor.windowManager.close(); // nur aktivieren, wenn gewünscht
            }
          })
          .catch(function (err) {
            alert('Upload-Fehler: ' + err);
          });
      };
      input.click();
    }
  },
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7971
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Mini CMS für Mobirise

Beitrag von Tommy Herrmann »

CMS for Mobirise

Ich habe mein JavaScript zur automatischen Anzeige der Bilder in der Lightbox erneut leicht angepasst und eine optionale Bildzählung eingebaut. Wer die Zählung nicht möchte, kann sie einfach auf "false" setzen und somit ausschalten.

Unter jedem Bild wird dann automatisch in der Lightbox die entsprechende Bildnummer angezeigt wie: 1(7)

Für große Hintergrund-Galerien halte ich das für notwendig, damit der Betrachter weiß, wie viele Fotos ihn erwarten.

https://www.mobirise-tutorials.com/Tuto ... ox-Galerie
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste