Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Hacer que el plugin web2py ckeditor funcione con SQLFORM.grid
Ejemplos basados en proyecto plug_and_play.

I.
INCLUIR ckeditor.js

Hay 2 alternativas: incluir via python, o de la forma clásica javascript. Utilice la que no cause problemas (errores en la consola).

  1. Via python. En la vista que extiende '_index.html', que inicia con:
{{extend '_index.html'}} en donde se hacen los llamados Ajax para mostrar el formulario(SQLFORM.grid) correspondiente, se debe agregar el siguiente bloque, inmediatamente luego anterior:

{{
response.files.insert(0,URL('static','plugin_ckeditor/ckeditor_basic.js'))
response.include_meta()
response.include_files()
}}

Quedando el inicio del archivo de la siguiente forma:


{{extend '_index.html'}}
{{
response.files.insert(0,URL('static','plugin_ckeditor/ckeditor_basic.js'))
response.include_meta()
response.include_files()
}}

(Ver ejemplo: "views/desktop/admin_desktop.html")

2. Forma clásica javascript En cualquier archivo de la vista donde se utilizará ckeditor, agregar lo siguiente:

 <script type="text/javascript" src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%7B%7B%3DURL%28request.application%2C%27static%27%2C%27plugin_ckeditor%2Fckeditor_basic.js%27%29%7D%7D">
</script> 



II. Incluir la siguiente funcion javascript, por ejemplo, en el archivo "views/_index.html" si se requiere que esté disponible para todas las vistas.


<body>
   ... resto de "body"
   <!-- Bloque Ckeditor -->
        <script type="text/javascript">
            function deleteCKEditorInstances() {
                //Necesario para que funcione el plugin ckeditor en los grids
                //El siguiente bloque "recarga" los widgets CKEditor. (en realidad, los elimina,  el plugin los recarga luego)
                if (CKEDITOR && CKEDITOR.instances) {
                    for (var oldName in CKEDITOR.instances) {
                        //en la página de donde se sacó el código, se realiza un cambio de nombres
                        //source: http://stackoverflow.com/questions/1794219/ckeditor-instance-already-exists
                        //como utilizamos un plugin, la utilizacion no es la misma, y parece ser innecesario
                        //var newName = "ajax"+oldName;
                        //CKEDITOR.instances[newName] = CKEDITOR.instances[oldName];
                        //CKEDITOR.instances[newName].name = newName;
                        delete CKEDITOR.instances[oldName];
                    }
                }
                //el bloque anterior, en funcionalidad es equivalente a 
                //CKEDITOR.instances = new Array();
                //pero pareciera mas apropiado en cuanto al manejo de memoria
            }
        </script>
        <!-- END Bloque Ckeditor -->
</body>



III. Al final de las vistas llamadas vía ajax, agregar el siguiente llamado
a la funcion javascript (definida en "views/_index.html")


<script type="text/javascript">
    deleteCKEditorInstances();
</script>

(ver ejemplo: "views/desktop/display_persona.load")