Página de contenido para Drupal

function mimodulo_menu() {
 $items = array();

 $items['admin/config/content/mimodulo'] = array(
 'title' => 'Mi módulo',
 'description' => 'Configuración de mi módulo',
 'page callback' => 'drupal_get_form',
 'page arguments' => array('mimodulo_form'),
 'access arguments' => array('access administration pages'),
 'type' => MENU_NORMAL_ITEM,
 );
 $items['mimodulo'] = array(
 'title' => 'Mi módulo',
 'page callback' => '_mimodulo_page',
 'access arguments' => array('access mimodulo 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),
 ); 
 }
 
 if (empty($items)) { 
 $page_array['mimodulo_arguments'] = array(
 
 '#title' => t('Contenido mi módulo'),
 '#markup' => t('No hay.'),
 );
 return $page_array; 
 } 
 else {
 $page_array['mimodulo_arguments'] = array(
 '#title' => t('Contenido mi módulo'),
 '#items' => $items,
 //Theme hook with suggestion. 
 '#theme' => 'item_list__mimodulo',
 );
 return $page_array;
 }
}

Configuración básica Drupal

1.- Instalar Drupal. Necesitamos una base de datos y los archivos de Drupal:

https://www.drupal.org/project/drupal

2.- Instalar y configurar algún tema si es necesario:

https://www.drupal.org/project/project_theme

3.- Instalar módulos básicos:

Wysiwyg: https://www.drupal.org/project/wysiwyg

Bajar librerías de TyniMCE (Versión 3.5.11):

TynMCE 3.5

O de CKEditor:

http://ckeditor.com/download

En este último caso modificar la línea 81 de sites\all\modules\wysigyg\editors\ckeditor.inc por esta:

if (preg_match(‘@version:\»(?:CKEditor )?([\d\.]+)(?:.+revision:\»([\d]+))?@’, $line, $version)) {

Las tenemos que guardar en sites\all\libreries

ckeditor

Tenemos que configurar qué editor vamos a usar para cada estilo y los botones que añadiremos a cada uno. ¡Ojo con el BBcode en el tinyMCE, que nos quita las imágenes!

IMCE: Para subir imágenes:

https://www.drupal.org/project/imce

https://www.drupal.org/project/imce_wysiwyg

3.- Menús

Instalar el módulo superfish:

https://www.drupal.org/project/superfish

Y bajar la librería superfish:

https://github.com/mehrpadin/Superfish-for-Drupal/archive/1.x.zip

4.- Vistas

Necesitamos los siguientes módulos:

Chaos Tools

https://www.drupal.org/project/ctools

Views

https://www.drupal.org/project/views

5.- Otros tipos de campos:

Fechas:

http://drupal.org/project/date

Youtube:

https://www.drupal.org/project/youtube

Referencias a nodos:

https://www.drupal.org/project/references

Plugin Frase del día: action, filter y widget

<?php
/*
 Plugin Name: Frase del día
 Plugin URI: https://es.wikiquote.org/wiki/Portada
 Description: Muestra una frase del día diferente
 Author: Jota Peich
 Version: 1.0
 Author URI: http://intelisen.com
 */

function frase_getFrase() {
 $upload = wp_upload_dir();

 $frases = file($upload['basedir'] . "/frases.txt");
 return $frases[rand(0, count($frases) - 1)];
}

function frase_ponFrase() {
 echo frase_getFrase();
}

add_action('admin_notices', 'frase_ponFrase');

function frase_filtro($contenido) {
 return $contenido . "<br/>" . frase_getFrase();
}

add_filter("the_content", 'frase_filtro');

class FraseWidget extends WP_Widget {

 function FraseWidget() {
 $widget_ops = array('classname' => 'FraseWidget', 'description' => 'Muestra una frase del día');
 $this->WP_Widget('FraseWidget', 'Frase del día', $widget_ops);
 }

 function form($instance) {
 $instance = wp_parse_args((array) $instance, array('title' => ''));
 $title = $instance['title'];
 ?>
 <p><label for="<?php echo $this->get_field_id('title'); ?>"><?= _e('Title') ?>: <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" /></label></p>
 <?php
 }

 function update($new_instance, $old_instance) {
 $instance = $old_instance;
 $instance['title'] = $new_instance['title'];
 return $instance;
 }

 function widget($args, $instance) {
 extract($args, EXTR_SKIP);

 echo $before_widget;
 $title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);

 if (!empty($title))
 echo $before_title . $title . $after_title;;

 echo frase_getFrase();

 echo $after_widget;
 }

}

add_action('widgets_init', create_function('', 'return register_widget("FraseWidget");'));

Crear host virtual

A la hora de desarrollar una web es conveniente tener configurado un host virtual. Así podemos acceder vía una web falsa. Por ejemplo, si estoy desarrollando la web miweb.com, puedo crear un host llamado miweb.dev para el desarrollo que apunte a la carpeta local.

¿Cómo hacerlo? Básicamente hay que hacer dos cosas: decirle a windows que ese dominio es local y configurar un host virtual.

Lo primero se hace en:

C:\Windows\System32\drivers\etc\hosts

Añadiendo lo siguiente:

127.0.0.1 miweb.dev

Lo segundo en C:\xampp\apache\conf\extra\httpd-vhosts.conf

Añadiendo lo siguiente:

<Directory «C:/xampp/htdocs/»>
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>

<VirtualHost *:80>
ServerAdmin webmaster@gmail.com
DocumentRoot «C:/xampp/htdocs/miweb»
ServerName miweb.dev
</VirtualHost>

Redirigir un dominio a un hosting

Cuando contratamos un hosting puede ser virtual o compartido, en cuyo caso por lo general nos proporcionan las dns que tenemos que poner en el dominio, o dedicado, en cuyo caso tenemos una ip donde está nuestro alojamiento.

En el primer caso tenemos que introducir las dns en el apartado que para tal fin tenga nuestro dominio:

dns

En el caso de tener una ip tenemos que redirigir los registros:

ip

Guardar datos en options

<?php

/*
 Plugin Name: Guarda datos
 Plugin URI: https://es.wikiquote.org/wiki/Portada
 Description: Guarda mi nombre y apellidos y nada más
 Author: Jota Peich
 Version: 1.0
 Author URI: http://intelisen.com
 */

add_action('admin_menu', 'guardar_menu');
add_action('admin_init', 'guardar_settings');

function guardar_settings() {
 register_setting('guardar-group', 'guardar_nombre');
 register_setting('guardar-group', 'guardar_apellido');
}

function guardar_menu() {
 add_options_page('Guardar datos personales', 'Guardar datos', 'manage_options', 'guardar-datos', 'guardar_options');
}

function guardar_options() {
 if (!current_user_can('manage_options')) {
 wp_die('No tiene permiso.');
 }
 ?>

 <div>
 <?php screen_icon(); ?>
 <h2>Guardar datos personales</h2>

 <form method="post" action="options.php">
 <?php
 settings_fields('guardar-group');
 do_settings_fields('guardar-group', '');
 ?>

 <p>Nombre</p>
 <input size="70" type="text" name="guardar_nombre" value="<?php echo get_option('guardar_nombre'); ?>" />
 <p>Apellido</p>
 <input size="70" type="text" name="guardar_apellido" value="<?php echo get_option('guardar_apellido'); ?>" />

 <?php
 submit_button();
 ?>
 </form>
 </div>
 <?php
}