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

Actualización - 31/05/2025

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

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.

Guía R-011 – Utilización de Plantillas

He estado revisando algunas plantillas disponibles (FREE) para React y son excelente y hay una gran cantidad de ellas.

¿Por qué utilizar plantillas? Porque de entrada, te facilitan una gran labor de «presentación» de tu aplicación, además de tener una estructura de directorios y ficheros que te explican cómo se debe construir un proyecto grande y ordenado, y además,  te facilita una gran cantidad de código de calidad para tu aplicación.

¿Qué problemas tiene? Esta es mi conclusión, por lo que puede que para otro perfil pueda tener otros.

  • Normalmente, hay muchas plantillas de alta calidad que utilizan los componentes que ellos mismos han producido y eso te «obliga» a que tu proyecto se basen, principalmente, en esos componentes. A mi me gustan los componentes y soluciones de Material UI. Son los que he utilizado en artículos anteriores.
  • El código que te entrega es de alta calidad y por lo tanto, necesitas tener buen conocimiento de React y del conjunto de componentes que utilizan en la Plantilla. Casi todos los casos disponen de una documentación que explica cómo está construido.
  • No son aplicaciones completas (lógicamente), por lo que falta toda la parte del Server y siempre o casi siempre, te venden una versión PRO que es mucho más completa y relativamente barata.

DEMO: https://fhumanes.com/mantis-react/

Si te interesa este tema, sigue leyendo el artículo en este enlace.

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 R-010 – Aplicaciones REACT multi-idiomas

Una de las cosas (y son muchas) que PHPRunner tiene muy bien resuelta es la construcción de aplicaciones multi-idioma.

Este artículo es la búsqueda de una de las soluciones que dispone React de producir aplicaciones multi-idiomas. He utilizado para el ejemplo la solución de i18next y más concretamente el componente react-i18next, que es una solución muy sencilla y elegante, por lo que recomiendo su utilización.

Objetivo

Poder desarrollar aplicaciones multi-idioma, los que se deseen, detectando el idioma por el navegador o sistema operativo, en donde funcione la aplicación.

DEMO: https://fhumanes.com/i18n-react/

Si te interesa este tema, sigue leyendo el artículo en este enlace.

Consulta sobre evolución del blog

Llevo un tiempo pensando si este blob tiene sentido para los desarrolladores de React, vengan o no de desarrollar de PHPRunner y si la evolución que estoy dándole es valida para aquellos que accedéis a él.

Por las estadísticas que tengo en el blog veo que tengo unas 50 visitas diarias y que de todos los artículos hay descargas de los ejemplos.

En PHPRunner he tenido bastante comunicación con muchos de vosotros y más o menos, conozco qué detalles de los ejemplos os pueden interesar, pero no es así para aquellos que descargáis los ejemplos de React.

Aunque cada vez dedico menos tiempo a completar de artículos este blog, el tiempo que dispongo lo dedico principalmente a React y ahí en donde me gustaría saber de cuáles son vuestras necesidades, de cara a desarrollar ejemplos que os faciliten vuestra evolución en el aprendizaje de este entorno.

He pensado dejaros unas preguntas sobre mis dudas, para que a través de comentarios (más o menos anónimos, si queréis), me podáis responder. También podéis tratar cualquier otro tema que os sea de interés.

El usar esta plataforma para la consulta es porque me es sencilla su utilización y porque no obligo a que vuestra identidad sea expuesta, si vosotros no queréis.

Gracias por vuestra colaboración

Preguntas

  • ¿Os interesa artículo sobre componentes, como la guía R-009, o aplicaciones completas?
  • En los desarrollos de PHP (server) , para los servicios de los desarrollos React, ¿ Os interesa que esté integrado con PHPRunner o preferís que sea 100% PHP y MySQL?
  • Además de utilizar principalmente los componentes de «Material UI», ¿creéis interesante utilizar otros que sean free?
  • ¿Creéis que  Flutter puede ser más interesante que React?