Come aggiungere la funzionalità WYSIWYG agli elementi di Magento Config


21

Per un determinato modulo personalizzato ho bisogno di un elemento di configurazione per avere un editor WYSIWYG. In questo momento sto usando "textarea" nel mio sistema xml per ottenere una textarea normale.

Suppongo che devo aggiungere un "frontend_type" extra basato su textarea per aggiungere questa funzionalità, ma mi chiedo se ci sono altre / migliori opzioni

Risposte:


23

Prima di tutto aggiungi questo in qualsiasi file di layout, per caricare l'editor nella sezione config:

<adminhtml_system_config_edit>
    <update handle="editor"/>
    <reference name="head">
        <action method="setCanLoadTinyMce"><load>1</load></action>
    </reference>
</adminhtml_system_config_edit>

Ora crea il tuo renderizzatore di campi. Deve essere un blocco all'interno del tuo modulo:

<?php
class Namespace_Module_Block_Adminhtml_System_Config_Editor 
    extends Mage_Adminhtml_Block_System_Config_Form_Field 
    implements Varien_Data_Form_Element_Renderer_Interface {

    protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) {
        $element->setWysiwyg(true);
        $element->setConfig(Mage::getSingleton('cms/wysiwyg_config')->getConfig());
        return parent::_getElementHtml($element);
    }
}

Ora per l'elemento all'interno di system.xml imposta frontend_type 'editor' e frontend_model il tuo nuovo blocco

<fieldname translate="label">
    <label>Field label </label>
    <frontend_type>editor</frontend_type>
    <frontend_model>module/adminhtml_system_config_editor</frontend_model>
    <sort_order>150</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
</fieldname>

Esistono alcuni problemi quando si modifica l'ambito di configurazione in un sito Web o in una vista dello store. La textarea non diventa "disabilitata". Ma se puoi ignorarlo, puoi usarlo senza problemi.


Ottima risposta, ha funzionato per me.
Rick Kuipers,

Funzionava così .. !! +1
balanv

3

Volevo aggiungere questo come commento, ma non ho abbastanza reputazione. Purtroppo, questa informazione è senza dubbio utile per qualcuno.

Quando ho implementato la soluzione di Marius, ho visto il pulsante Mostra / Nascondi Editor, ma quando l'ho cliccato, ho ricevuto un errore javascript:

Uncaught ReferenceError: tinyMceWysiwygSetup is not defined

Una rapida ricerca su google mi ha portato a questa altra domanda di scambio di stack di magento che mi ha suggerito che hai bisogno di linee aggiuntive nel tuo layout per caricare tutto il javascript necessario nella sezione di configurazione. Incorporare questo con la soluzione di Marius mi ha dato un aggiornamento del layout che assomiglia a questo:

<!-- Enable wysiwyg for config in admin -->
<adminhtml_system_config_edit>
    <update handle="editor"/>
    <reference name="head">
        <action method="setCanLoadTinyMce"><flag>1</flag></action>
        <!-- Beginning of my additions -->
        <action method="setCanLoadExtJs"><flag>1</flag></action>
        <action method="addJs"><script>mage/adminhtml/variables.js</script></action>
        <action method="addJs"><script>mage/adminhtml/wysiwyg/widget.js</script></action>
        <action method="addJs"><script>lib/flex.js</script></action>
        <action method="addJs"><script>lib/FABridge.js</script></action>
        <action method="addJs"><script>mage/adminhtml/flexuploader.js</script></action>
        <action method="addJs"><script>mage/adminhtml/browser.js</script></action>
        <action method="addJs"><script>prototype/window.js</script></action>
        <action method="addJs"><script>prototype/prototype.js</script></action>
        <action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
        <action method="addItem"><type>js_css</type><name>prototype/windows/themes/magento.css</name></action>
    </reference>
</adminhtml_system_config_edit>

Ecco il link a quell'altra domanda: Uncaught ReferenceError: tinyMceWysiwygSetup non è definito


0

I tuoi addJ aggiuntivi non sono necessari qui. In effetti, la maggior parte dei tuoi chiamati è già nell'handle "editor". Ecco perché facciamo qui<update handle="editor"/>

Assicurati solo che le tue aggiunte siano in design> adminhtml e non in design> frontend

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.