• Deutsch
  • English
  • Anmeldung OTOBO Community
+49 (0)9427 68 39 000
OTOBO
  • SOFTWARE
    • Software | Überblick
    • IT Service Management
    • Customer Service Management
    • Enterprise Service Management
    • Demo
    • Download
    • Dokumentation
  • SERVICES
    • Überblick Services
    • Beratung
    • Training
    • Entwicklung
    • OTRS Migration zu OTOBO
    • Support
    • Managed Service
    • Support-Portal
  • UNTERNEHMEN
    • Über uns
    • Karriere
    • Partner
    • Kontakt
    • Newsletter
  • RESSOURCEN
  • COMMUNITY
    • Open Source
    • Community Forum
    • Download
    • Dokumentation
    • OTOBO übersetzen
  • Click to open the search input field Click to open the search input field Suche
  • Menü Menü
Ansicht von 0 Antwort-Threads
  • Autor
    Beiträge
    • 12. Juni 2026 um 15:19 Uhr - Views: 179 #41698
      marcel-graf
      Teilnehmer

        Folgend ein Beispiel, wie man einen Textbaustein Button in die AgentTicketCompose Oberfäche einbindet.

        In der Otobo Console folgendes durchführen:

        #— sicherstellen, das der Pfad existiert—

        mkdir -p /opt/otobo/Custom/Kernel/Output/HTML/Templates/Standard/

        #—die Datei in den Pfad kopieren —

        cp /opt/otobo/Kernel/Output/HTML/Templates/Standard/AgentTicketCompose.tt /opt/otobo/Custom/Kernel/Output/HTML/Templates/Standard/

        #–die Datei zum bearbeiten öffnen–

        nano /opt/otobo/Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketCompose.tt

        nach Zeile 343 ( <!– OutputFilterHook_NoTicketOptionsFallback –>) folgenden Code Einfügen

        #————————

        <!– Beginn Ihrer Textbausteine im OTOBO-Layout –>

        <label style=“font-size: 12px;“>Textbausteine:</label>

        <select class=“Button“
        style=“padding: 2px 5px; font-size: 11px; vertical-align: middle; cursor: pointer; display: inline-block; width: 180px; height: 21px; border: 1px solid #ccc; box-shadow: none; background: #fff;“
        onchange=“event.stopPropagation();
        if(!this.value) return;

        // 1. In Zwischenablage kopieren (Als Fallback)
        const tempInput = document.createElement(‚textarea‘);
        tempInput.value = this.value;
        document.body.appendChild(tempInput);
        tempInput.select();
        document.execCommand(‚copy‘);
        document.body.removeChild(tempInput);

        // 2. Text in den Editor einfügen (Der Textbaustein wird eingefügt und 2 Zeilenumbrüche werden angehängt)
        const htmlContent = this.value.replace(/\n/g, ‚<br>‘) + ‚<br><br>‘;

        // Fall A: OTOBO nutzt den alten CKEditor 4
        if (typeof CKEDITOR !== ‚undefined‘ && CKEDITOR.instances) {
        const activeEditor = CKEDITOR.currentInstance || Object.values(CKEDITOR.instances);
        if (activeEditor) {
        activeEditor.focus();
        activeEditor.insertHtml(htmlContent);
        }
        }
        // Fall B: OTOBO 11 nutzt den neuen CKEditor 5
        else {
        // Findet das Eingabefeld des CKEditor 5 im aktuellen Formular
        const editable = document.querySelector(‚.ck-editor__editable‘);
        if (editable && editable.ckeditorInstance) {
        const editorInstance = editable.ckeditorInstance;
        editorInstance.focus();

        // Fügt den HTML-Inhalt an der Cursorposition ein
        const viewFragment = editorInstance.data.processor.toView(htmlContent);
        const modelFragment = editorInstance.data.toModel(viewFragment);
        editorInstance.model.insertContent(modelFragment);
        }
        }

        // Dropdown zurücksetzen
        this.selectedIndex = 0;“>
        <option value=““ selected disabled>📝 bitte auswählen…</option>
        <option value=“Hallo zusammen,

        vielen Dank für Ihre Nachricht.

        Mit freundlichen Grüßen“>Begrüßung Standard</option>
        <option value=“Wir haben Ihr Ticket erhalten und prüfen den Vorfall aktuell in unserer Fachabteilung. Wir melden uns schnellstmöglich wieder bei Ihnen.“>Zwischenbescheid</option>
        </select>

        <!– Ende Ihrer Textbausteine –>

        #————————

        #—hier beginnt der vorhandene Code—
        <label class=“Mandatory“ for=“RichText“>*[% Translate(„Text“) | html %]:</label>

        #—Datei speichern und den Cache löschen

        bin/otobo.Console.pl Maint::Loader::CacheCleanup

        Wie immer vor Änderungen am System ein Backup machen.

        Gruß Marcel

         

    • Autor
      Beiträge
    Ansicht von 0 Antwort-Threads
    • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

    Foren durchsuchen

    Anmeldung

    Anmeldung

    Konto erstellen
    Passwort vergessen?

    Login via Social

    Profil

    Bitte vervollständigen Sie nach der Registrierung Ihr Profil, das vereinfacht die spätere Kommunikation enorm. Ihre Profileinstellung finden Sie, wenn Sie auf Ihr Avatarbild klicken.

    Sie können Ihren Avatar ändern, indem Sie sich mit Ihrer E-Mail-Adresse unter gravatar.com registrieren.

    Letzte Aktivitäten

    • Dynamische Felder in AgentTicketNote mit ACL verstecken
    • FAQ: kaputtes Copy & Paste von Bildern zwischen Artikeln
    • Benachrichtigung „Ticket wurde mir entzogen“ möglich?
    • Statistik Anzahl Tickets pro Agent
    • Docker: Ändern des redis Hosts

    Unternehmen

    Über uns
    Karriere
    Stellenbörse
    Partner werden
    Kontakt
    Newsletter

    OTOBO | Simplify work and create exceptional service experiences.

    Die Source Code Owner und Maintainer hinter OTOBO.

    Software

    Service Management-Plattform
    OTOBO Demo
    OTOBO Download
    OTOBO Dokumentation

    Security-Problem melden:
    security@otobo.org

    Services

    Support-Portal
    Beratung
    Training
    Support
    Managed Services
    Erweiterung
    OTRS Migration
    Partner finden

    Community

    Open Source
    Community Forum
    Mitmachen
    OTOBO Developer
    OTOBO@GitHub

    © 2026 Rother OSS GmbH | All rights reserved.
    • Cookie-Einstellungen
    • Impressum
    • Datenschutz
    • Haftungsausschluss
    Nach oben scrollen Nach oben scrollen Nach oben scrollen