Documentos de Académico
Documentos de Profesional
Documentos de Cultura
tutorial:
PHP, Desarrollo en drupal, POO, Base de datos relacionales.
Nota: Este tutorial enfocará solo los aspectos dirigidos a entity api, no se explicará nada relacionado al
desarrollo común de módulos de drupal, se toma como consenso que ya es un conocimiento previamente
tomado.
Subjetivos:
Introducción:
El curso estará estructurado por un conjunto de artículos que abarcarán los aspectos básicos a conocer para
desarrollar entidades en drupal 7. Este desarrollo estará basado en un ejemplo práctico que ayudará a salir
de un ambiente conceptual y adentrarnos en un caso particular.
Caso práctico:
Se pretende desarrollar un módulo para drupal 7 que permita llevar las estadísticas de campeonatos de fútbol,
donde se gestionen los torneos, jornadas y partidos por jornadas, así como toda la gestión de equipos que
participen en cada uno de los torneo.
Diagrama de gestión :
Un torneo se conforma por varias jornadas y varios equipos, una jornada por muchos partidos y estos a su
vez por 2 equipos.
Se debe llevar una tabla de resultados donde se reporten la cantidad de juegos jugados, juegos perdidos,
juegos empatados y ganados, así como la cantidad de goles a favor y en contra y el total de puntos acumulados
por cada equipo participante en el torneo.
Desarrollo Tema 1:
Nota: Se tomará la entidad torne como base para explicar todo el contenido del código mostrado.
Puntos a tratar:
Desarrollo:
Extraer las entidades del caso práctico.
Diagrama de entiddes:
Como se muestra en el diagrama trabajaremos solo con 4 entidades (torneo, jornada, equipo, juego).
/* Implements hook_schema().
*
*/
function module_name_schema() {
$schema = array();
//--------------------MODULE_NAME_TORNEO----------------------
$schema ['module_name_torneo'] = array(
'fields' => array(
'torneo_id' => array( //nombre de la propiedad o columna de la entidad
'unsigned' => TRUE, //auto incrementado el campo
'type' => 'serial', // se define el tipo de dato
'not null' => TRUE, //Si puede o no ser nudo este valor
),
'categoria_id' => array(
'type' => 'int', // se define el tipo de dato
'default' => 0, //se define valor por defecto
),
'estado' => array(
'type' => 'int',
'default' => 0,
),
'nombre' => array(
'type' => 'varchar',
'length' => '100', //se asigna un tamaño del campo
'default' => '',
),
),
'primary key' => array(//se declara la llave primaria de la entidad
'torneo_id'
),
);
//Continuamos con las otras entidades de la misma forma que //anteriormente se explicó...
return $schema;
}
//------------------------------module_name_torneo-------------------------------------------
$info['module_name_torneo'] = array(
//Etiqueta para identificar la entidad.
'label' => t('module_name_torneo'),
//Se le da la posibilidad a la entidad de agregar nuevos campos, como hace las //entity node,user...
return $info;
}
//Esta clase permite implementar los nuevos métodos no heredados de ¬¬//DrupalDefaultEntityController y re implementar
los de la interface //anteriormente explicada a su conveniencia.
class Entitymodule_name_torneoController
extends DrupalDefaultEntityController
implements Entitymodule_name_torneoControllerInterface {
//Se crea una nueva entidad y se definen los vlores por defecto de la misma.
public function create() {
$entity = new stdClass();
$entity->type = 'module_name_torneo';
$entity->bundle_type = 'module_name_torneo';
$entity->torneo_id=0;
$entity->categoria_id=0;
$entity->estado=0;
$entity->nombre='';
return $entity;
}
//Este método elimina 1 o varias entidades en dependencia de lo que se envié //en el array $entities pasado como parámetro.
public function delete_multiple($entities) {
$torneo_ids = array();
if (!empty($entities)) {
//Se crea una transaction
$transaction = db_transaction();
try {
//Se recorre el array de entidades y se invoca el hook 'entity_delete' de la //entity API y se eliminan los campos añadidos a la
entidad.
foreach ($entities as $entity) {
Conclución:
Hasta aquí la primera parte de este curso, entre los aspectos tratados en esta primera parte, se destaca
la creación de entidades,implementación de EntityController e integración con el hook_schema() y
hook_entity_info, en próximos capítulos veremos la integración con los módulos y la gestión de los field, las
vistas y el manejo entre entidades a través del EntityContoller implementado en esta primera parte.
Anexo:
Si no quedo muy claro la explicación de la integración entre hook_schema, hook_entity_info y
EntityController, se le muestra una imagen donde se refleja la integración entre los mismo.
Se refleja la relación entre Schema,entity_info y contoladores, el hoock_entity_info integra todo ,¨base table¨
integra el schema con la entidad,y ¨controller class¨ integra los controladores que la gestionarán, y estos a
su vez implementan todos los metodos de la misma.