cargar dinamicamente plugin jquery

Tengo que reconocer que no tengo paciencia para probar 30 combinaciones o más, así que de antemano perdón. Intentaré preguntar de forma genérica cosa que la respuesta le sea útil a tod@s.

  • Tengo un pagelet_renglones.js personalizo en la ruta:
pers/univ/operaciones/operacion/renglones/pagelet_renglones.js
  • Y tengo un pluggin de jqery en la ruta:
pers/univ/www/js/superPluggin.js
  • En la primera línea de pagelet_renglones.js intento cargar dinámicamente al pluggin:
$.getScript( "js/superScript.js");

Pero ya hice varias pruebas y el script no carga… ¿Cómo debiera ser el path relativo?

Supongo que la mejor forma de encararlo será incluirlo en el twig personalizado de la operación.

Analizando los twigs encontré algo que quizás funcione:

	<script type='text/javascript' src='{{ url_recursos ~ 'siu/js/guarani_mash.js' }}' charset="{{encoding}}"></script>
	{% if es_browser %}
		<link type='text/css' href='{{ url_recursos ~ 'siu/css/guarani_mash.css' }}' rel='stylesheet' />
		{% if mash_personalizado %}
			<link type='text/css' href='{{ url_recursos ~ personalizacion ~ '/css/guarani_mash.css' }}' rel='stylesheet' />

Probaré un mix de lo anterior (con suerte funciona):

<script type='text/javascript' src='{{ url_recursos ~ personalizacion ~ 'pers/univ/js/superScript.js' }}' charset="{{encoding}}"></script>

Pero estoy viendo como me queda la estructura compilada (…/_comp/) y me marea un poco…

  • no hay rastro de superScript.js
  • dentro de la estructura del siu encuentro que existe el path _comp/siu/js/escalas/univ/cond_res.js (pero no existe _comp/univ/js/escalas/cond_res.js)

Veré de reordenar los archivos y probarlo en modo desarrollo, si funciona bien recien compilo los recursos y lo pruevo en producción.

Hola Diego, lo ideal seria lo siguiente, primero hay que modificar esto en el CORE del 3W para que funcione:

  1. reemplaza el archivo src/siu/lib/kernel/nucleo/acceso_recurso.php por el que te adjunte (OJO es un txt, cambiale la extensión).

  2. en el archivo src/siu/lib/kernel/nucleo/recursos.php función get_path_js cambiale el encabezado por (se le agrega el parámetro $ns):


static function get_path_js($nombre, $ns = false)
	{
		.................
	}

  1. agrega la siguiente función en el archivo src/siu/lib/kernel/util/vinculador.php:

function vinculo_js($nombre)
    {
        $alias = kernel::proyecto()->get_alias();
        $path_url = "js/$nombre.js";
        $ns = kernel::proyecto()->get_personalizacion_activa();

        if (kernel::proyecto()->get_produccion()) {
            $url_recursos = kernel::proyecto()->get_url_recursos() . "/$ns";
            $url_js = "$url_recursos/$path_url";
        } else {
            $url_js = "$alias/rs.php/" . self::PARAM_IGNORED_RECURSOS . "/$path_url?ns=$ns";
        }

        return $url_js;
    }

Ahora si podemos personalizar:

  1. agregas tu JS, ej: src/pers/univ/www/js/superPluggin.js

  2. para cargarlo en el pagelet src/pers/univ/operaciones/notas_cursada/pagelet_renglones.php seria:


<?php
namespace univ\operaciones\notas_cursada;

use kernel\kernel;

class pagelet_renglones extends \siu\operaciones\notas_cursada\pagelet_renglones
{

    function get_js_files()
    {
        //Archivos JS que carga el SIU 
        $archivos = parent::get_js_files();
        //archivo JS agregado por la Universidad
        $archivos[] = kernel::vinculador()->vinculo_js("superPluggin");
        return $archivos;
    }

}

con esto vas a poder cargar el archivo js/superPluggin.js en el pagelet personalizado ya sea en desarrollo o producción.

podes usar este mismo código para cargarlo en cualquier otro lugar.

saludos.


acceso_recurso.txt (2.95 KB)

Fantástico aporte Leonel!

Y también sería fantástico que esta mejora se incluya en las nuevas versiones de 3W… así no se pierde en este hilo.

Perfecto!!!

si, se va a incluir para las próximas versiones!!!

saludos.

Importante!

Tuve que hacer un pequeño cambio (en negrita) para que funcione:

function vinculo_js($nombre)
{
    $alias = kernel::proyecto()->get_alias();
    $path_url = "js/$nombre.js";
    $ns = kernel::proyecto()->get_personalizacion_activa();

    if (kernel::proyecto()->get_produccion()) {
        $url_recursos = kernel::proyecto()->get_url_recursos()."/$ns/operaciones";
        $url_js = "$url_recursos/$path_url";
    } else {

$url_js = “$alias/rs.php/$path_url”;
}

    return $url_js;
}