sábado, 31 de agosto de 2019

Paso de valores y formularios en WordPress

Antes de comenzar conviene tener clara la diferencia entre un tema hijo y un tema desde cero.

Temas hijo y temas desde cero

En primer lugar hay dos conceptos diferentes: Un tema hijo y un tema desde cero. Para hacer un tema desde cero sólo necesitamos crear una subcarpeta en themes ponerle el nombre de nuestro tema desde cero y añadir un archivo llamado style.css que puede estar también vacío y contener sólo estas líneas.

/*
Theme Name: Nombre tema desde cero
Theme URI: https://wordpress.org/themes/temacero/
Text Domain: temacero
*/

El inconveniente de un tema desde cero es que perdemos todos los formatos, cabeceras, estilos, etc. La ventaja es que es muy ligero y podemos hacer con él lo que queramos.

Nota: los nombres de los archivos y las URL´s son muy importantes en Wordpress,  así por ejemplo si creamos uno llamado page-contacto.php  Wordpress lo buscará si no encuentra nada en page.php  y lo mostrará si ponemos en el navegador  una url del estilo localhost/wordpress/contacto  si el nombre del archivo es diferente no funcionará)

si ponemos localhost/wordpress en el navegador, se  abrirá la página principal page.php pero no mostrará nuestro código del archivo anterior , para que lo muestre hay que forzarlo poniendo localhost/wordpress/contacto.

Otra alternativa son los temas hijo, en este caso copiamos el tema completo y lo renombramos como tema-child, en style.css tenemos que añadir una línea indicando quien es el tema padre.

@import url("../tema-padre/style.css");

La ventaja de este método es que conservamos todos los estilos y funcionalidades, el inconveniente, es que ocupa más.

No me voy a extender más porque hay mucha información en la web sobre cómo hacer temas hijo o temas desde cero, lo que nos interesa es una vez tenemos nuestro tema como añadirle funcionalidad y de eso ya sí que no hay nada en la web.

En nuestro caso hemos optado por un tema hijo para no perder funcionalidad.

Formularios en un tema hijo de WordPress

Lo primero que realizaremos será añadir un formulario a la página de inicio, para ello en WordPress elegiremos como página de inicio la home. Para ello tendremos que tener una página en blanco llamada Home en pages.

Paso de valores y formularios en WordPress

sábado, 17 de agosto de 2019

Depurar Temas y Plugins de WordPress Con Eclipse y Xdebug

Hay veces que no basta con las herramientas de WordPress y necesitamos depurar su código interno para hacer lo que queramos y tener más control sobre nuestra página web o blog.

Un depurador remoto, es un programa instalado en el lado del servidor que intercepta todo el código PHP que es ejecutado. Entre otras funciones, tiene la capacidad de parar la ejecución del código a mitad y pasar información a un cliente externo, como un Entorno de Desarrollo Integrado (IDE, Integrated Development Environment). mostraremos cómo usar el depurador remoto XDebug y el IDE de código abierto Eclipse juntos para procesar el código de WordPress y resolver errores. 

En la mayoría de sitios que he visitado para buscar información te cuentan la chorrada de que en el archivo wp-config.php hay que poner la entrada define ('WP_DEBUG' = , true); y a correr, como si todo el mundo supiéramos ya como montar un entorno de desarrollo y depuración para WordPress. No ha sido fácil encontrar información de cómo hacer esto, pero esto es lo que he conseguido después de buscar mucho y probar. Esta guía es para Linux, pero se puede aplicar prácticamente igual (excepto los comandos de Linux) para instalarlo sobre Windows.

El entorno de desarrollo

Se supone que ya tenemos instalado un servidor Apache/PHP/MySQL y una instalación de WordPress. Si no es así, aquí están las instrucciones para hacerlo.

Instalar Xdebug

Para instalar XDebug en el servidor tenemos que abrir un terminar con permisos de root y escribir.

sudo apt-get install php-xdebug

Reiniciamos el servidor apache, para ello basta con pulsar el botón restart del servidor apache de la carpeta Manage Servers del panel de administración de Bitnami-LAMP.  Si no vemos este panel, lo podemos arrancar desde el terminal de Linux con:

sudo  cd /opt/wordpress

y luego escribimos

./manager-linux-x64.run

Esto nos abrirá esta pantalla en la que en la pestaña Manage server podemos poner en marcha MySQL y el servidor Apache.

Reiniciar el servidor Apache desde Bitnami

sábado, 3 de agosto de 2019

Escritura de consultas en SQL


El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por el motor de base de datos de Microsoft SQL Server. SQL se utiliza para crear objetos QueryDef, como el argumento de origen del método OpenRecordset y como la propiedad RecordSource del control de datos. También se puede utilizar con el método Execute para crear y manipular directamente las bases de datos y crear consultas SQL de paso a través para manipular bases de datos remotas cliente-servidor. 

Escritura de consultas en SQL

El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular bases de datos. 
Al igual que los métodos de desplazamiento DAO, SQL proporciona comandos del lenguaje de definición de datos (DDL) y del lenguaje de manipulación de datos (DML). Aunque existen algunas áreas solapadas, los comandos DDL permiten crear y definir nuevas bases de datos, campos e índices, mientras que los comandos DML le permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.

DDL 

Las instrucciones DDL en SQL son expresiones generadas en torno a los siguientes comandos. 

CREATE  Utilizado para crear nuevas tablas, campos e índices. 

DROP Utilizado para eliminar tablas e índices de la base de datos. 

ALTER Utilizado para modificar tablas agregando campos o cambiando la definición de los campos. 

DML 

Las instrucciones DML son expresiones generadas en torno a los comandos siguientes. 

SELECT Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado. 

INSERT Utilizado para cargar lotes de datos en la base de datos en una única operación. 

UPDATE Utilizado para modificar los valores de campos y registros específicos. 

DELETE Utilizado para eliminar registros de una tabla de base de datos. 

Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular. La siguiente tabla muestra las cláusulas que podemos utilizar.

Cláusulas

FROM Utilizada para especificar la tabla de la cual se van a seleccionar los registros. 

WHERE Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar. 

GROUP BY Utilizada para separar los registros seleccionados en grupos específicos. 

HAVING Utilizada para expresar la condición que debe satisfacer cada grupo.

ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con un orden especificado. 

Existen dos tipos de operadores en SQL: operadores lógicos y operadores de comparación. 

Operadores lógicos 

Los operadores lógicos se usan para conectar expresiones, normalmente dentro de una cláusula WHERE. Por ejemplo: 

SELECT * from Mitabla WHERE condicion1 AND condicion2 

Aquí el operador AND conecta las expresiones condicion1 y condicion2 para especificar que se deben cumplir las dos condiciones para satisfacer el criterio de selección. Los operadores lógicos son: 

AND 
OR 
NOT 

Operadores de comparación 

Los operadores de comparación se usan para comparar valores relativos de dos expresiones con el fin de determinar la acción que debe ejecutarse. Por ejemplo: 

SELECT * from Editores WHERE Id_de_editor = 5 

Aquí el operador '=' especifica que sólo se seleccionarán los registros que tengan un campo_Id de editor con un valor de 5. 
Los operadores de comparación se enumeran en la siguiente tabla.

Operadores

< Menor que 
<= Menor o igual que
> Mayor que 
>= Mayor o igual que 
= Igual que
 <> Distinto de 

BETWEEN Utilizado para especificar un intervalo de valores

LIKE Utilizado en la comparación de un modelo 

IN Utilizado para especificar registros de una base de datos

Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de registros para devolver un único valor que se aplica a un grupo de registros. Por ejemplo, la función de agregado AVG devuelve el promedio de todos los valores de un campo determinado de un objeto Recordset. La siguiente tabla enumera las funciones dé agregado. 

Funciones  de agregado

AVG Utilizada para calcular el promedio de los valores de un campo determinado. 

COUNT Utilizada para devolver el número de registros de la selección. 

SUM Utilizada para devolver la suma de todos los valores de un campo determinado.

MAX Utilizada para devolver el valor más alto de un campo especificado. 

MIN Utilizada para devolver el valor más bajo de un campo especificado. 

Las instrucciones del lenguaje de manipulación de datos (o DML) SQL se utilizan para recuperar, actualizar, agregar o eliminar registros de tablas. Para estas tareas se admiten diversas instrucciones, pero la mayoría de ellas utilizan la estructura general de la consulta SELECT. 

Utilizaremos la instrucción SELECT para recuperar registros de una base de datos en forma de un conjunto de registros, almacenándolos en un nuevo objeto Recordset. Posteriormente, nuestra aplicación puede manipular estos Recordset presentando, agregando, cambiando o eliminando registros según sea necesario. Nuestra aplicación también puede presentar y crear informes a partir de los datos. 

SELECT suele ser la primera palabra de una instrucción SQL. La mayoría de las instrucciones SQL son SELECT o SELECT...INTO. Puede utilizar una instrucción SELECT en la propiedad SQL de un objeto QueryDef, en la propiedad RecordSource de un control de datos o como argumento para el método OpenRecordset. Las instrucciones SELECT no modifican los datos de la base de datos; sólo los recuperan. 

La estructura general de la consulta SELECT es la siguiente: 

SELECT listaCampos FROM nombresTablas WHERE condicionesBúsqueda GROUP BY listaCampos HAVING criterios ORDER BY listaCampos WITH OWNERACCESS OPTION 

Cada una de estas instrucciones y cláusulas se describen en las siguientes secciones. 

La consulta básica 

La consulta SELECT más simple es:

SELECT * FROM nombre Tabla 

Por ejemplo, la siguiente consulta SELECT devolverá todas las columnas de todos los registros de la tabla Empleados: 

SELECT * FROM Empleados 

El asterisco indica que se van a recuperar todas las columnas de la tabla o tablas deseadas. Podríamos especificar sólo algunas columnas. Cuando mostremos los datos de cada columna, aparecerán en el orden que se indica, así que podemos reordenar las columnas para aumentar su legibilidad: 

SELECT [Nombre], [Apellido] FROM Empleados 

Especificación del origen de los datos 

Una instrucción SELECT siempre tendrá una cláusula FROM, indicando la tabla o tablas cuyos registros se extraerán. 

Si el nombre del campo está incluido en dos o más tablas en la cláusula FROM, debe precederlo con el nombre de la tabla y el operador . (punto). En el ejemplo siguiente, el campo Departamento está en las tablas Empleados y Supervisores. La instrucción SQL selecciona Departamento de la tabla Empleados y NombreSuperv de la tabla Supervisores: 

SELECT Empleados.Departamento, NombreSuperv 
FROM Supervisores, Empleados 
WHERE Empleados.Departamento = Supervisores.Departamento; 

Cuando la cláusula FROM incluye más de una tabla no es importante el orden en el que aparecen. 

Especificación de una tabla en una base de datos externa 

Algunas veces necesitaremos hacer referencia a una tabla en una base de datos externa, a la que pueda conectarse el motor de base de datos Microsoft. Esto se consigue con la cláusula opcional IN. La cláusula IN aparece generalmente a continuación del nombre de una tabla en una cláusula FROM, pero también puede utilizarse en una cláusula SELECT INTO o INSERT INTO, donde la tabla de destino está en una base de datos externa. 

Podemos utilizar IN para conectarnos a una sola base de datos externa a la vez. 

En algunos casos, el argumento ruta de acceso se refiere al directorio que contiene los archivos de base de datos. Por ejemplo, cuando trabajamos con tablas de bases de datos Access, el argumento ruta de acceso especifica el directorio que contiene los archivos .accdb El nombre de archivo de la tabla deriva de los argumentos destino o expresión Tabla. 
Para especificar una base de datos que no sea SQL, añadir un punto y coma (;) al nombre e incluirlo entre comillas simples (") o dobles (" "). Por ejemplo, son válidos: 
'Access;' 

— O bien — 

También podemos utilizar la palabra clave DATABASE para especificar la base de datos externa. Por ejemplo, las dos líneas siguientes especifican la misma tabla: 

SELECT * FROM Table IN "" [Access; DATABASE=C:\DBASE\DATA\SALES;]; SELECT * FROM Table IN "C:\DBASE\DATA\SALES" "Access;" 

Alias de los nombres de columnas 

Cuando se crea un objeto Recordset mediante una instrucción SELECT, los nombres de las columnas de la tabla se transforman en los nombres de objetos Field del Recordset. Si queremos tener nombres de columnas diferentes, utilizaremos la cláusula AS. El siguiente ejemplo utiliza el título "FDN" para nombrar la columna de fecha de nacimiento extraída de la tabla Empleados: 

SELECT [Fecha de nacimiento] AS FDN FROM Empleados; 

Cada vez que utilicemos consultas que devuelvan nombres de objeto Field ambiguos o duplicados, debemos utilizar la cláusula AS para proporcionar un nombre alternativo para el Field. El siguiente ejemplo utiliza el título "Cuenta principal" para nombrar el Field devuelto en el Recordset resultante:

SELECT COUNT(Id de empleado) AS [Cuenta principal] FROM Empleados; 

Uso de variables Visual Basic en instrucciones SQL 

En un programa Visual Basic, podemos crear una instrucción SELECT en nuestra aplicación concatenada con variables locales dentro de la instrucción, según se necesite para seleccionar, ordenar o filtrar los datos en su aplicación. Por ejemplo, si tenemos un control TextBox (TituloDeseado) que contiene el nombre de un Titulo y queremos seleccionar todos los libros de la tabla Titulos con este título, podemos crear una instrucción SQL que incluya el valor actual del TextBox. Observar que la consulta SQL incluye entre comillas simples (") el valor de TituloDeseado: 

Set Rst = Db.OpenRecordset("SELECT * FROM Titulos " _ & " WHERE Titulo = "' & TituloDeseado.Text & )