Ciao ragazzi, prima che avevo qualche minuto libero ho provato a creare un’extension che mi farebbe comodo, un widget per rimpiazzare la textarea con il plugin di jquery Markitup.
<?php
class YiiMarkitup extends CInputWidget {
public function init()
{
parent::init();
$assetsFolder=Yii::app()->assetManager->publish(
Yii::getPathOfAlias('application.extensions.yiimarkitup.assets')
);
Yii::app()->clientScript->registerCssFile($assetsFolder.'/skins/markitup/style.css');
Yii::app()->clientScript->registerCssFile($assetsFolder.'/sets/bbcode/style.css');
Yii::app()->clientScript->registerScriptFile($assetsFolder.'/jquery.markitup.js');
Yii::app()->clientScript->registerScriptFile($assetsFolder.'/sets/bbcode/set.js');
Yii::app()->clientScript->registerCoreScript('jquery');
if (isset($this->htmlOptions['id']))
$id = $this->htmlOptions['id'];
else
$id = CHtml::activeId($this->model, $this->attribute);
Yii::app()->clientScript->registerScript("{$id}",
'$(document).ready(function() {
$("textarea").markItUp(mySettings);
});'
);
}
public function run()
{
echo CHtml::activeTextArea($this->model, $this->attribute, $this->htmlOptions);
}
}
Mi sono trovato difronte a due problemi.
- vorrei includere nell’assets direttamente tutti i sets (bbcode, html, wiki…);
L’unica soluzione che mi è venuta in mente è piazzare una variabile che dipende dalla scelta dell’utente in fase di inizio widget, in questo modo:
Yii::app()->clientScript->registerCssFile($assetsFolder.'/sets/'.$type.'/style.css');
Yii::app()->clientScript->registerScriptFile($assetsFolder.'/sets/'.$type.'/set.js');
Però non saprei come recuperare questo $type definito dell’utente, sicuro però ci sono metodi più puliti e logici, vero?
- la config dello script si trova nel file set.js in formato json. Come posso fare un merge di queste opzioni con alcune definite sempre dall’utente quando chiama il widget?