2013-04-22 68 views
2

我想從我正在構建的自定義塊內部的模態對話框中打開TinyMCE。我知道如何實現模態對話框,但無法找到將TinyMCE集成到對話框中的方法。Concrete5:如何在自定義塊內的模態對話框中打開TinyMCE?

我想要實現的是在塊添加/編輯彈出框中單擊文本時,它應該打開一個TinyMCE對話框來編輯單擊的文本。任何人之前做過?

這就是我想在添加/編輯的形式來實現:

$this->addHeaderItem(Loader::helper('html')->javascript('tiny_mce/tiny_mce.js')); 
Loader::element('editor_init'); 
Loader::element('editor_config'); 
Loader::element('editor_controls'); 

<textarea name="field-name" class="text-area-value ccm-input-textarea">Some text here or empty....</textarea> 

$bt = BlockType::getByHandle('myblock'); 
<a class="dialog-launch ccm-block-type-inner" 
dialog-on-close="ccm_blockWindowAfterClose()" dialog-append-buttons="true" 
dialog-modal="false" dialog-width="500" 
dialog-height="500" dialog-title="<?php echo t('Add/Edit Text)?>" 
href="<?php echo $th->getBlockTypeToolsURL($bt); ?>/tinymce_dialog.php?text=<?php echo $text-area-value; ?>"> 
    Edit the above text in TinyMCE 
</a> 

在tinymce_dialog.php在工具文件夾:

<textarea name="textarea-name" 
class="ccm-input-textarea advancedEditor ccm-advanced-editor"> 
    <?php echo $_GET['text']; ?> 
</textarea> 

<div class="ccm-buttons dialog-buttons"> 
    <a href="javascript:void(0)" onClick="ccm_blockWindowClose();" 
     class="ccm-button-left btn">Cancel</a> 
    <a href="" onClick="" class="btn primary">Ok</a> 
</div> 

但我無法通過textarea的價值進入模式對話框彈出。我嘗試在錨標記中使用href將textarea的值傳遞給駐留在工具文件夾中的腳本,但似乎也不起作用。

編輯:我也在tinymce_dialog.php中添加了按鈕(請參閱上面的代碼)。不確定是否可以通過表單中的<a dialog-on-close="ccm_blockWindowAfterClose()" dialog-append-buttons="true".....>這些按鈕。

回答

2

應該和其他地方一樣工作。首先,加入這一行的代碼,一旦在對話框(你只需要一次,無論你有多少的TinyMCE的有):

<?php Loader::element('editor_config'); ?> 

然後,你希望每個TinyMCE的,使用此:

<?php Loader::element('editor_controls'); ?> 
<textarea name="your-field-name" class="ccm-advanced-editor"></textarea> 
+0

不知道我是否正確理解這一點。使用'class =「ccm-advanced-editor」'直接將textarea轉換爲TinyMCE。我在上面的原始文章中添加了一些細節。謝謝。 – user1448031 2013-04-23 00:19:55

1

有兩種方法去了解這一點:

  1. 正如你在你的問題的編輯,在那裏你加載工具文件描述。這裏有幾點:
    • 網址並不是很適合傳遞文本數據,特別是那些用tinymce(長和格式化)編輯的文本。據說,它應該工作。我不明白爲什麼$_GET不起作用。確保該URL首先包含文本(您可以通過查看開發人員控制檯來查看)。
    • 更好的是傳遞一個ID(tinymce_dialog?id = [ID])。這是假設文本保存在數據庫中,但它看起來像你可能會提供一個接口,基本上「wysiwyg編輯模式文本,他們不是 - wyswiwyg編輯已經」。不過,我不確定你是否已經考慮過這將如何工作。默認情況下,他們將不得不處理一堆HTML標記?
  2. 另一種方法是從DOM元素中創建對話框。創建一個隱藏在窗體中的div,使用CSS display: none;,將文本保存到其中(如果已經初始化,tinymce有.update()或其他),然後顯示隱藏的div(示例3從http://www.concrete5.org/documentation/how-tos/developers/javascript-jquery-and-concrete5/)。當他們點擊(SAVE)時,您可以(大概)將數據從tinymce中複製出來並放回到需要的位置。

請注意,在許多情況下,tinymce初始化代碼僅在頁面加載時運行。我認爲這就是Loader::element('editor_init')所做的。它通過檢測適當的textareas(基於類名稱)工作。因此,如果帶有editor_init的頁面在加載textarea之前加載(比如現在的樣子),則必須重新啓動tinymce。這是對#2的投票。一般來說,我建議你走那條路。

相關問題