Material didàctic docents formació complementària
Material didàctic docents igualtat de gènere
Manual Prevenció Riscos Laborals
Añadimos esto en la vista index:
<li><?php echo $this->Html->link('Ver producto con ID 1', array('controller' => 'cliente', 'action' => 'rest_view', 1)); ?></li> <li><?php echo $this->Html->link('Añadir producto', array('controller' => 'cliente', 'action' => 'rest_add')); ?></li> <li><?php echo $this->Html->link('Actualizar producto 2', array('controller' => 'cliente', 'action' => 'rest_edit', 2)); ?></li> <li><?php echo $this->Html->link('Borrar producto 3', array('controller' => 'cliente', 'action' => 'rest_delete', 3)); ?></li>
Y esto en el controlador:
public function rest_view($id){ $link = $this->url.'rest_productos/'.$id.'.json'; $data = null; $httpSocket = new HttpSocket(); $response = $httpSocket->get($link, $data ); $this->set('response_code', $response->code); $this->set('response_body', $response->body); $this -> render('/Cliente/respuesta'); } public function rest_add(){ $link=$this->url."rest_productos.json"; $data = null; $httpSocket = new HttpSocket(); $data['Producto']['nombre'] = 'Nuevo producto'; $data['Producto']['referencia'] = 'Nueva referencia'; //$data['Phone']['name'] = 'New Phone Description'; $response = $httpSocket->post($link, $data ); $this->set('response_code', $response->code); $this->set('response_body', $response->body); $this -> render('/Cliente/respuesta'); } public function rest_edit($id){ $link = $this->url.'rest_productos/'.$id.'.json'; $data = null; $httpSocket = new HttpSocket(); $data['Producto']['nombre'] = 'Actualizado producto'; $data['Producto']['referencia'] = 'Actualizada referencia'; $response = $httpSocket->put($link, $data ); $this->set('response_code', $response->code); $this->set('response_body', $response->body); $this -> render('/Cliente/respuesta'); } public function rest_delete($id){ // remotely post the information to the server $link = $this->url.'rest_productos/'.$id.'.json'; $data = null; $httpSocket = new HttpSocket(); $response = $httpSocket->delete($link, $data ); $this->set('response_code', $response->code); $this->set('response_body', $response->body); $this -> render('/Cliente/respuesta'); }
Teniendo bien configurado el formulario, debemos tener lo siguiente en el add del controlador:
if ( !empty($this->request->data['Entrada']['documento']['tmp_name']) && is_uploaded_file($this->request->data['Entrada']['documento']['tmp_name']) ) { // Strip path information $filename = basename($this->request->data['Entrada']['documento']['name']); move_uploaded_file( $this->data['Entrada']['documento']['tmp_name'], WWW_ROOT . DS . 'documentos' . DS . $filename ); }
Dentro de componentes crear un archivo llamado:
UtilidadesComponent.php
class UtilidadesComponent extends Component { public $components = array(); public function frase(){ $spam=array('Muy bueno','Estupenda entrada','Eres un crack','Lo mejor que he leído','Ole y ole','Me ha gustado','Bastante bueno','Muy interesante','De gran utilidad','Está bastante bien','Me ha hecho pensar'); $com=$spam[rand(0,count($spam)-1)]; return $com; } }
Cuando creamos un modelo tenemos la posibilidad de introducir validación de datos. Se indica con la variable $validate:
class User extends AppModel { var $name = 'User'; var $validate = array( 'login' => 'alphaNumeric', 'email' => 'email', 'born' => 'date' ); }
Las reglas de validación pueden ser complejas:
class User extends AppModel { var $name = 'User'; var $validate = array( 'login' => array( 'alphaNumeric' => array( 'rule' => 'alphaNumeric', 'required' => true, 'message' => 'Sólo letras y números' ), 'between' => array( 'rule' => array('between', 5, 15), 'message' => 'Entre 5 y 15 caracteres' ) ), 'password' => array( 'rule' => array('minLength', '8'), 'message' => 'Largo mínimo de 8 caracteres' ), 'email' => 'email', 'born' => array( 'rule' => 'date', 'message' => 'Ingrese una fecha válida', 'allowEmpty' => true ) ); }
El formato general es el siguiente:
var $validate = array( 'fieldName1' => array( 'rule' => 'ruleName', // ó: array('ruleName', 'param1', 'param2' ...) 'required' => true, 'allowEmpty' => false, 'on' => 'create', // ó: 'update' 'message' => 'Su mensaje de error' ) );
Cada campo puede tener más de una regla:
var $validate = array( 'login' => array( 'alphanumeric' => array( 'rule' => 'alphaNumeric', 'message' => 'Se permiten sólo letras y números', 'last' => true ), 'minlength' => array( 'rule' => array('minLength', '8'), 'message' => 'Largo mínimo de 8 caracteres' ), ) );
Una lista de todas las reglas incorporadas en el núcleo se puede encontrar aquí:
Los cuatro tipos de relaciones en CakePHP son: hasOne, hasMany, belongsTo y hasAndBelongsToMany(HABTM), “tiene un”, “tiene muchos”, “pertenece a” y “tiene y pertenece a muchos”, respectivamente.
Relación | Tipo de Asociación | Ejemplo |
---|---|---|
uno a uno | hasOne (“tiene un”) | Una usuario tiene un perfil. |
uno a muchos | hasMany (“tiene muchos”) | Un usuario puede tener múltiples entradas. |
muchos a uno | belongsTo (“pertenece a”) | Muchas entradas pertenecen a un usuario. |
muchos a muchos | hasAndBelongsToMany (“tiene y pertenece a muchos”) | Las entradas tienen, y pertenecen a, muchas etiquetas. |
Ejemplos:
class Usuario extends AppModel { var $name = 'Usuario'; var $hasOne = 'Perfil'; }
class Perfil extends AppModel { var $name = 'Perfil'; var $belongsTo = 'Usuario'; }
Específico:
class Perfil extends AppModel { var $name = 'Perfil'; var $belongsTo = array( 'Usuario' => array( 'className' => 'Usuario', 'foreignKey' => 'usuario_id' ) ); }
class Usuario extends AppModel { var $name = 'Usuario'; var $hasMany = 'Comentario'; }
Específica:
class Usuario extends AppModel { var $name = 'Usuario'; var $hasMany = array( 'Comentario' => array( 'className' => 'Comentario', 'foreignKey' => 'usuario_id', 'conditions' => array('Comentario.estado' => '1'), 'order' => 'Comentario.created DESC', 'limit' => '5', 'dependent'=> true ) ); }
class Receta extends AppModel { var $name = 'Receta'; var $hasAndBelongsToMany = array( 'Etiqueta' => array('className' => 'Etiqueta', 'joinTable' => 'etiquetas_recetas', 'foreignKey' => 'receta_id', 'associationForeignKey' => 'etiqueta_id', 'with' => '', 'conditions' => '', 'order' => '', 'limit' => '', 'unique' => true, 'finderQuery' => '', 'deleteQuery' => '', 'insertQuery' => '' ) ); }
Responde a las siguientes preguntas. Cada pregunta vale un punto.
1.- En wordpress hay dos tipos básicos de contenido ¿Cuáles son y en que se diferencian?
2.- ¿En qué apartado podemos configurar nuestro sitio para que tenga urls amigables?
3.- ¿Podemos cambiar dinámicamente la barra lateral? Explica desde donde y con qué objetos.
4.- Dentro del index.php de un tema hay las siguientes líneas:
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( ‘content’, get_post_format() ); ?>
<?php endwhile; ?>
¿Qué es lo que hacen?
5.- En mi carpeta de temas tengo los siguientes archivos:
content-image.php , content-video.php, content.php, content-quote.php
Suponiendo que mi index.php sea como el de la pregunta 4 ¿Para qué sirven tantos archivos?
6.- He creado un tema hijo de Twenty Fifteen y tengo esto en la cabecera del css:
/*
Theme Name: Tema hijo
Description: Tema hijo de Twenty Fifteen
Author: Aitor Tilla
Author URI: http://aitortilla.com
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: light, dark, two-columns, right-sidebar, responsive-layout, accessibility-ready
* /
¿Hay algo qué esté mal? Si es así soluciónalo
7.- He creado un plugin con las siguientes líneas:
add_filter(‘the_content’, ‘miplugin_get_button’);
function miplugin_get_button($content) {
return $content . ‘<h2>Ola k ase?</h2>’;
}
¿Qué es lo que hace?
8.- En Drupal hay una carpeta donde se guarda la configuración, lo módulos y los temas instalados. ¿Cuál es?
9.- Tengo un módulo personalizado en Drupal con el siguiente código:
function mimodulo_menu() {
$items = array();
$items[‘mimo’] = array(
‘title’ => ‘Mi módulo’,
‘page callback’ => ‘_mimodulo_page’,
‘access arguments’ => array(‘access mimoduloextra content’),
‘type’ => MENU_NORMAL_ITEM,
);
return $items;
}
function _mimodulo_page() {
$result = mimodulo_contenido();
$items = array();
foreach ($result as $node) {
$items[] = array(
‘data’ => l($node->title, ‘node/’ . $node->nid),
);
}
$page_array[‘mimodulo_arguments’] = array(
‘#title’ => t(‘Contenido mi módulo’),
‘#items’ => $items,
//Theme hook with suggestion.
‘#theme’ => ‘item_list__mimodulo’,
);
return $page_array;
}
function mimodulo_contenido(){
$max_num = variable_get(‘current_posts_max’, 3);
$query = db_select(‘node’, ‘p’)
->fields(‘p’, array(‘nid’, ‘title’, ‘created’))
->condition(‘status’, 1) //Published.
->orderBy(‘created’, ‘DESC’) //Most recent first.
->range(0,$max_num)
->execute();
return $query;
}
Si mi drupal está en localhost/drupal ¿Qué se muestra si pongo localhost/drupal/mimo?
10.- Un amigo quiere montar una tienda online para vender productos de artesanía. Tiene unos 50 productos diferentes. ¿Qué CMS le instalaríais y por qué? ¿Cuál no y por qué?