Contenidos: páginas, artículos, eventos...

Recetas sencillas para crear y modificar contenidos tales como páginas, artículos, eventos..

Añadir enlaces dentro de los contenidos

Esta es una de las recetas sencillitas dirigidas a personas que se defiende con cierta dificultad en la cocina. Explicaré cómo añadir un enlace dentro de un contenido.

Paso 1. Seleccionaremos el texto o palabras que deseamos sean el enlace a otra página web.
Seleccionar texto

Paso2. En el editor de texto que estemos utilizando seleccionaremos el icono de añadir enlace que habitualmente contiene un "ocho tumbado".

Paso3. En el campo "Link href" introduciremos la url de la página que deseamos apuntar y en "title" pondremos el texto que deseamos se lea al pasar el ratón por encima del enlace.

Completar la URL

Paso 4. Enviar. Ya tenemos nuestro enlace

Cómo crear un contenido y darle acceso desde otro dentro de la misma web

En esta receta explicamos cómo crear un contenido dándole acceso desde otro contenido de la misma web. O dicho de otra manera, explicamos cómo crear páginas y cómo crear enlaces en los mismo contenidos.

Ingredientes: versión 4.6 de Drupal (aunque podría utilizarse otras posteriores), y el módulo htmlarea

Preparación:

1. Creamos una página

Crear contenido > Página

Escribimos el título y contenido, y ponemos especial atención a la URL. Deberemos recordar la ruta que escribamos o en su defecto, cuando creemos el contenido nos fijaremos en el número de nodo (o url) que le asigna. Por ejemplo, si es un contenido de la sección de Internacional de la web podremos poner como url "internacional/portugal".

2. Vamos a la página o contenido desde la cual queremos enlazar y la editamos. Seleccionamos el texto que será el enlace y vamos a "Insert Web Link". Según el módulo de editor de textos que estemos utilizando el icono será diferente, pero probablemente tendrá el aspecto de un ocho tumbado. Una vez hagamos "click" sobre este icono, se nos abrirá una ventana donde le indicaremos la URL. Puesto que es una página de la propia web no hará falta que escribamos "http://" en la ruta. Siguiendo el ejemplo anterior escribiremos "internacional/portugal". Aceptaremos y ya tendremos el enlace creado. Ahora sólo nos quedará "Enviar" la página y ....listo para comer.

Crear archivos comprimidos en ZIP

Crear archivos comprimidos en drupal es muy fácil, sólo hace falta introducir en el módulo el archivo zip.inc y algo de programación.

En las líneas que se añaden en ejemplo.module se tiene que especificar el archivo o archivos a comprimir y el nombre del fichero zip. En este ejemplo los archivos a comprimir son foto1.jpg y foto2.jpg y el zip resultante es fotos_comprimidas.zip

Basado en el artículo de Michael.M: Creating ZIP files

ejemplo.module:

require_once("./includes/zip.inc");
$zip = new zipfile();
$files_to_zip = array('foto1.jpg', 'foto2.doc');
foreach ($files_to_zip as $filename) {
$zip->addFile(file_get_contents(file_create_path($filename)), $filename); // the second parameter specifies the filename in the zip
}
if (!file_save_data($zip->file(), file_create_path('fotos_comprimidas.zip'))) {
drupal_set_message(t('The zip could not be created.'), 'error');
}
?>

zip.inc:

/* $Id: zip.lib.php,v 2.4 2004/11/03 13:56:52 garvinhicking Exp $ */
// vim: expandtab sw=4 ts=4 sts=4:
/**
* Zip file creation class.
* Makes zip files.
*
* Based on :
*
* http://www.zend.com/codex.php?id=535&single=1
* By Eric Mueller
*
* http://www.zend.com/codex.php?id=470&single=1
* by Denis125
*
* a patch from Peter Listiak for last modified
* date and time of the compressed file
*
* Official ZIP file format: http://www.pkware.com/appnote.txt
*
* @access public
*/
class zipfile
{
/**
* Array to store compressed data
*
* @var array $datasec
*/
var $datasec = array();

/**
* Central directory
*
* @var array $ctrl_dir
*/
var $ctrl_dir = array();

/**
* End of central directory record
*
* @var string $eof_ctrl_dir
*/
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";

/**
* Last offset position
*
* @var integer $old_offset
*/
var $old_offset = 0;

/**
* Converts an Unix timestamp to a four byte DOS date and time format (date
* in high two bytes, time in low two bytes allowing magnitude comparison).
*
* @param integer the current Unix timestamp
*
* @return integer the current date in a four byte DOS format
*
* @access private
*/
function unix2DosTime($unixtime = 0) {
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);

if ($timearray['year'] < 1980) {
$timearray['year'] = 1980;
$timearray['mon'] = 1;
$timearray['mday'] = 1;
$timearray['hours'] = 0;
$timearray['minutes'] = 0;
$timearray['seconds'] = 0;
} // end if

return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
} // end of the 'unix2DosTime()' method

/**
* Adds "file" to archive
*
* @param string file contents
* @param string name of the file in the archive (may contains the path)
* @param integer the current timestamp
*
* @access public
*/
function addFile($data, $name, $time = 0)
{
$name = str_replace('\\', '/', $name);

$dtime = dechex($this->unix2DosTime($time));
$hexdtime = '\x' . $dtime[6] . $dtime[7]
. '\x' . $dtime[4] . $dtime[5]
. '\x' . $dtime[2] . $dtime[3]
. '\x' . $dtime[0] . $dtime[1];
eval('$hexdtime = "' . $hexdtime . '";');

$fr = "\x50\x4b\x03\x04";
$fr .= "\x14\x00"; // ver needed to extract
$fr .= "\x00\x00"; // gen purpose bit flag
$fr .= "\x08\x00"; // compression method
$fr .= $hexdtime; // last mod time and date

// "local file header" segment
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
$c_len = strlen($zdata);
$fr .= pack('V', $crc); // crc32
$fr .= pack('V', $c_len); // compressed filesize
$fr .= pack('V', $unc_len); // uncompressed filesize
$fr .= pack('v', strlen($name)); // length of filename
$fr .= pack('v', 0); // extra field length
$fr .= $name;

// "file data" segment
$fr .= $zdata;

// "data descriptor" segment (optional but necessary if archive is not
// served as file)
// nijel(2004-10-19): this seems not to be needed at all and causes
// problems in some cases (bug #1037737)
//$fr .= pack('V', $crc); // crc32
//$fr .= pack('V', $c_len); // compressed filesize
//$fr .= pack('V', $unc_len); // uncompressed filesize

// add this entry to array
$this -> datasec[] = $fr;

// now add to central directory record
$cdrec = "\x50\x4b\x01\x02";
$cdrec .= "\x00\x00"; // version made by
$cdrec .= "\x14\x00"; // version needed to extract
$cdrec .= "\x00\x00"; // gen purpose bit flag
$cdrec .= "\x08\x00"; // compression method
$cdrec .= $hexdtime; // last mod time & date
$cdrec .= pack('V', $crc); // crc32
$cdrec .= pack('V', $c_len); // compressed filesize
$cdrec .= pack('V', $unc_len); // uncompressed filesize
$cdrec .= pack('v', strlen($name) ); // length of filename
$cdrec .= pack('v', 0 ); // extra field length
$cdrec .= pack('v', 0 ); // file comment length
$cdrec .= pack('v', 0 ); // disk number start
$cdrec .= pack('v', 0 ); // internal file attributes
$cdrec .= pack('V', 32 ); // external file attributes - 'archive' bit set

$cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
$this -> old_offset += strlen($fr);

$cdrec .= $name;

// optional extra field, file comment goes here
// save to central directory
$this -> ctrl_dir[] = $cdrec;
} // end of the 'addFile()' method

/**
* Dumps out file
*
* @return string the zipped file
*
* @access public
*/
function file()
{
$data = implode('', $this -> datasec);
$ctrldir = implode('', $this -> ctrl_dir);

return
$data .
$ctrldir .
$this -> eof_ctrl_dir .
pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk"
pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall
pack('V', strlen($ctrldir)) . // size of central dir
pack('V', strlen($data)) . // offset to start of central dir
"\x00\x00"; // .zip file comment length
} // end of the 'file()' method

}?>