Migración de Plugin a versión 11 de PHPRunner

Actualización - 31/05/2025

Una copia de este mensaje lo publiqué en el foro de XlineSoft, pero por alguna circunstancia ha sido borrado.

Mi objetivo era indicar a los usuarios que han utilizado algún plugin de esta web que ya tienen versión para PHPRunner v11 y para aquellos que hayan podido desarrollar algún plugin, cuáles son los problemas que yo he encontrado.

Ya he terminado la revisión y los problemas que he encontrado son:

  • Se ha controlado más los nombre de los ficheros, por ejemplo antes funcionaba como nombre de fichero editcalculator.php y ahora tiene que ser EditCalculator.php.

 

  • En versión 10, se puede utilizar la función «$this->addJSSetting()«, en las 2 funciones que se escriben para la lógica de los plugins, «function initUserControl()» y «function buildUserControl()«, que son las funciones de inicialización y construcción del plugin.
    En versión 11, sólo se puede utilizar, con resultado correcto, en la «function initUserControl()» y no en «function buildUserControl()«. No da error, pero la información que se pretender llevar al JavaScript, no llega.

 

  • En la Build 43439 de versión 11, persiste un error de refresco de información en las actualizaciones «inline» y «popup» (en las que se actualiza la información de LIST por Ajax) y eso repercute en los plugines en los que para visualizar los datos se utiliza el LOOKUP estándar de PHPRunner.

(1) Así aparece la información cuando se ejecuta el LIST.
(2) Así aparece (no se hace la conversión del ID, por el NAME), después de un EDIT o ADD.

Por ahora, mientras no se resuelva el problema, lo podéis cambiar por codificación indicando que en VIEW se utiliza el tipo «CUSTOM», con un código similar a este:

$in = $value;

if ( $value <> '' ) {
    $rs = DB::Query(
    "SELECT group_concat(
           concat('<span class=\"badge \">',name,'</span>')
           order by name ASC
           separator ' , ') names
    FROM prueba_plugin_lv
    WHERE idprueba_lv IN ( $in )"
    );
    while( $data = $rs->fetchAssoc() )
    {
    $value = $data['names'];
    }
}

Y en CUSTOM CSS:

.badge {
  /* Bordes más cuadrados (reduce el radio de borde) */
  border-radius: 3px !important; /* Valor original en BS3 es 10px */
  
  /* Opcional: ajustar padding para más "cuadratura" */
  padding: 3px 6px !important; /* Ajusta según necesites */
  
  /* Opcional: otros estilos para parecerse más a una etiqueta */
  font-weight: normal !important;
  font-size: 85% !important;
  background-color: #777 !important; /* Color de fondo estándar */
  color: white !important;
}

DEMO: https://fhumanes.com/plugines_v11/

En la Demo no he aplicado el «work around» que os he indicado para resolver el problema 3

En la página de plugins está todos los plugins para versión 11 y los anteriores para versión 10.
Los de versión 11 tendrán los prefijos Edit_ y View_ de cada uno de los plugins.

Problemas de los plugins en versión 11

Con la última actualización de PHPRunner versión 11, he vuelto a revisar cuál es el problema de los plugins en esta versión y creo que he identificado cuales son los problemas por lo cambios que ha hecho XlineSoft.

 

  1. En versión 10, se puede utilizar la función «$this->addJSSetting()«, en las 2 funciones que construyen la lógica de los plugins, «function initUserControl()» y «function buildUserControl()«, que son las funciones de inicialización y construcción del plugin.En versión 11, sólo se puede utilizar, con resultado correcto, en la «function initUserControl()» y no en «function buildUserControl()«. No da error, pero la información que se pretender llevar al JavaScript, no llega, porque el código para subir estos parámetros se ejecuta antes de ejecutar «function buildUserControl()«
  2. Se ha controlado más los nombre de los ficheros, por ejemplo antes funcionaba como nombre de fichero editcalculator.php y ahora tiene que ser EditCalculator.php. Esto es fácil de corregir y lo podéis hacer vosotros en el código que descargáis.

Identificado el principal problema (1), en estos momentos podría hacerlos funcionar cambiando codificación para que no me afecte los cambios que se han hecho en versión 11.

Voy a esperar algunas nuevas actualizaciones y si no se arregla, intentaré recodificar para subsanar los problemas.

Guía 71 – Plugin «Select2_ajax» – Actualización 29/08/2024

Se ha ampliado el artículo para explicar:

  • Se ha actualizado el plugin «Select2_ajax» porque tal y como estaba, no se podía dejar sin valor un campo que tuviese aplicado este plugin.

 

  • Se ha creado otro ejemplo, que entiendo es más fácil de entender, ya que el originalmente puesto, por el modelo de datos que utiliza estaba un poco «retorcida» la lógica de funcionamiento y podía generar confusión en su uso.

Este es el modelo de datos del nuevo ejemplo llamado «s2_car» y se muestra 3 lookups dependientes.

DEMO:  https://fhumanes.com/s2_car/

El código JavaScript de ADD y EDIT es:

var ctrl_s2_manufacturer_id = Runner.getControl(pageid,'s2_manufacturer_id'); 
var ctrl_s2_model_id = Runner.getControl(pageid,'s2_model_id');
var ctrl_s2_engine_id = Runner.getControl(pageid,'s2_engine_id');

setSession('s2_filter_manufacturer',ctrl_s2_manufacturer_id.getValue(), ctrl_s2_model_id); 

ctrl_s2_manufacturer_id.on('change', function() {
  console.log("Change Manufacturer");
  setSession( 's2_filter_manufacturer',ctrl_s2_manufacturer_id.getValue(), ctrl_s2_model_id);
  ctrl_s2_model_id.setValue('');
  ctrl_s2_engine_id.setValue('');
  clearSelect2(ctrl_s2_model_id);
  clearSelect2(ctrl_s2_engine_id);
});

ctrl_s2_model_id.on('change', function() {
  console.log("Change Model");
  setSession( 's2_filter_model',ctrl_s2_model_id.getValue(), ctrl_s2_engine_id);
  ctrl_s2_engine_id.setValue('');
   clearSelect2(ctrl_s2_engine_id);
});

ctrl_s2_engine_id.on('change', function() {
  console.log("Change Engine");	
});

Si deseas acceder al artículo completo, pulsa el siguiente enlace.

Utilización del Plugin AnyChart Actualización

En el Foro de XlineSoft y correos que he recibido, hay usuarios que desean que en la página LIST se pueda facilitar un gráfico en cada línea.

He tomado este ejemplo para explicar cómo se puede hacer con el Plugin de AnyChart.

Ese campo nuevo de la tabla «Factura» es un duplicado del «idfactura» y lo utilizaremos con el plugin para crear el gráficos.

Y el código escrito para producir el gráfico está en el fichero (anychart_3.php):

<?php
/*
Variables passed by the Plugin:

$field_value .- Field what show screen
$DataValue  .- Valor del campo que se utiliza en el plugin
$javascript  .- File of Javascript of Anychart
$theme .- File of Theme of Anychart
$language  .- File Javscript of language
$decimalsCount .-  Parameter
$zeroFillDecimals .-  Parameter
$decimalPoint .-  Parameter
$groupsSeparator .-  Parameter
$license .- License of ANYCHART  for PHPRunner
$id_field .-  Field occurrence identification number used to identify the "container".
*/

global $conn;

$chartData='';

$idfactura = $DataValue;

$strSQLExists = "SELECT
factura.idfactura, factura.Nif, factura.NombreRazonSocial, factura.FechaFactura, factura.TotalFactura,
linea_factura.idlinea_factura, linea_factura.factura_idfactura, linea_factura.producto_idproducto, linea_factura.Nombre, linea_factura.Valor
FROM factura
left join linea_factura on (factura.idfactura = linea_factura.factura_idfactura)
WHERE idfactura = $idfactura ";

$rsExists = db_query($strSQLExists,$conn);

  while ($Row = db_fetch_array($rsExists)) {
    $idFactura='Factura: '.$Row["idfactura"].' Producto: '.$Row["Nombre"];
    $TotalValor=$Row["Valor"];
    $FechaFactura=$Row["FechaFactura"];
    $chartData.="['$idFactura', $TotalValor, $FechaFactura] \n,";
  }
$chartData = substr($chartData, 0, -1);
 
$graphicDefinition= <<<EOT

// create pie chart with passed data
var data = anychart.data.set([ 
// add data of the Client
 $chartData 
    ]);

var wealth = data.mapAs({'x': 0, 'value': 1});

var chart = anychart.pie(wealth);

// License, out logo
$license

// apply coffee theme
// anychart.theme(anychart.themes.coffee);

// turn on chart animation
chart.animation(true);

// set chart title text settings
chart.title('Facturas del Cliente');
// Special 
chart.title().enabled(false);


// Tooltip
var tooltip = chart.tooltip();
tooltip.titleFormat("{%x}");

tooltip.format("Valor:{%value}{groupsSeparator:.,decimalPoint:\\\\,,decimalsCount:2}({%yPercentOfTotal}{decimalPoint:\\\\,,decimalsCount:2}%)");

// URL Format in:  https://docs.anychart.com/Common_Settings/Text_Formatters

chart.labels().format('{%Value}{decimalsCount:0} ({%yPercentOfTotal}{decimalsCount:2}%)');

// set legend title text settings
var legend = chart.legend();
// set legend position and items layout
legend.position("center");
legend.align("Bottom");
legend.fontSize(10);
legend.itemsLayout("vertical");

// Special 
legend.enabled(false);

// set container id for the chart
chart.container('container_$id_field');
// initiate chart drawing
chart.draw();
});
</script>
EOT;

$field_value .= $graphicDefinition;
?>

La nueva versión está programada en PHPRunner 10.7

Si te interesa este artículo, sigue leyéndolo en este link.