Un aiuto per la mia extension: YiiMarkitup

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.

  1. 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?

  1. 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?

Ho risolto (grazie anche al forum inglese u.ù).

Appena finisco la classe (anche se ho notato che c’era una bella e pronta >_>") posto la “soluzione”.

qual é la pronta? CMarkdown?

No, parlavo di extension già pronta.

Link