Exportem dades des de Drupal 6 a un repositori central CSV i importem en les noves taules

Image
Body

La idea és clara: faig consultes MySQL amb la informació que vull exportar, em cree un fitxer CSV i més tard importe eixa informació a la nova base de dades personalitzada.

Amb la següent consulta SQL aconseguisc tota la informació de la base de dades Drupal 6 de Klaku.net relativa a les notícies (codi id, títol, autor, categoria, url_font_noticia, vots_positius, vots_negatius i descripció).

artícles
17

Exportant tots els valors dels vots de Vote up/down de Drupal a una base de dades externa

Image
Body

La puntuació de les notícies del nou Klaku.net ha d'heretar les puntuacions de tots aquestos anys, no em val un "reiniciar i començar de nou" sinó que, tot i que vaig a reescriure la web i les bases de dades, vull que siga mantenint les dades de puntuacions dels anys passats a Drupal. Però, per a fer açò tenia que investigar com funciona el vote api i el mòdul vote up/dwn de Drupal 6.

M'he fet una consulta MySQL que contatena el sumatori dels vots positius amb un condicional i també els dels vots negatius amb un condicional, i finalment també els valors totals fent POSITIUS+(-NEGATIUS):


SELECT content_id, Sum(Case When value > 0 then value else 0 end) totalPositius, Sum(Case When value

Concretament, la consulta que veus a la captura de pantalla és aquesta:


SELECT content_id, Sum(Case When value > 0 then value else 0 end) totalPositius, Sum(Case When value

artícles
17

Evolució, anades d'olla i millores al projecte web Klaku.net

Body

Després de moltes hores intentant migrar Klaku.net des de l'actual versió Drupal 6 a versions més modernes (D6 6.38, D7 o D8), he tingut unes quantes reflexions personals i finalment he decidit migrar i evolucionar Klaku.net a una base de dades personalitzada i un desenvolupament amb Bootstrap + CSS3 + HTML5 com a front-end i PHP + MySQL + Ajax com a back-end

De moment, he fet el següent disseny:


CREATE TABLE novajxo ( id_novajxo int not null auto_increment, dato date, uzanto varchar(20), titolo varchar(140), ligilo varchar(200), total_pozitivoj int(6), total_malpozitivoj int(6), etikedoj varchar(140), kategorio varchar(50), sxtato varchar(10), PRIMARY KEY(id_novajxo));

CREATE TABLE uzanto ( id_uzanto int not null auto_increment, dato date, nomo varchar(20), retadreso varchar(100), pasvorto varchar(100), bildo varchar(60), PRIMARY KEY(id_uzanto));

CREATE TABLE kontrolo ( id_kontrolo int not null auto_increment, id_novajxo int(6), uzanto varchar(20), ip varchar(60), dato date, tipo_baloto varchar(20), PRIMARY KEY(id_kontrolo));

CREATE TABLE komento (id_komento int not null auto_increment, novajxo_id int(6), uzanto varchar(20), priskribo text, PRIMARY KEY (id_komento));

CREATE TABLE sekcioj (id_sekcio int not null auto_increment, nomo_sekcio varchar(50), PRIMARY KEY (id_sekcio));

artícles
17

Migrant un Drupal complet a un nou Drupal o nodes entre distints Drupals

Image
Body

En aquest article intente explicar breument alguns camins per al repte de migrar un projecte web Drupal 6 a un Drupal 7, o si no fas servir massa funcionalitats amb mòduls, directament a Drupal 8. Per què no? la valoració l'has de fer tu analitzant les funcionalitats i requisits tècnics de la teua web. Drupal 8 encara està una miqueta verd, en comparació amb Drupal 7, però el core és molt millor, sense dubte.

El primer pas quan vols actualitzar i migrar tot un Drupal a una nova versió és el camí tradicional: fer servir de update.php fins a tenir la última versió de Drupal 6, i a continuació descarregar la última versió de la nova versió del core que vullgues, 7.x o 8.x i fer un upgrade.

artícles
17

Funció de PHP que acurta simplement el domini d'una adreça determinada

Body

A la web de Klaku, tinc la funcionalitat just baix de la notícia que mostra el host des d'on ve la notícia. Per exemple, si la notícia té una adreça llarga tipo "vilaweb.cat/seccio/cultura/pep-botifarra-tocara-dema", jo el que vull mostrar es: Font --> vilaweb.cat.

Aleshores, amb la funció preg_match podem abreviar tota una url llarga i, fins i tot, ja siga aquesta http o https:

preg_match("/^(https?:\/\/)?([^\/]+)/i",$myrow['ligilo'], $coin);
$nombre_host_fuente_noticia = $coin[2];
?>

Adreso:

artícles
17

Drush or die

Image
Body

Ací vaig apuntant alguns apunts i cosetes diverses, aleshores aquest article també anirà ampliant-se conforme durant el temps necessite apuntar noves idees i alguns truquets. Per a resumir: avui en dia instal·lem drupals, els actualitzem, instal·lem mòduls i els activem, esborrem cachés i més coses des de la consola, sense necessita de fer clicks ni descàrregues manuals des de la web del projecte Drupal.


Informacions bàsiques
---------------------------------------------------------------

Drush és programari lliure, amb Python, i està disponible a totes les plataformes com FreeBSD, OpenBSD, GNU/Linux i altres merdes. Amb Drush, executem una ordre en consola i rebem una resposta. Per exemple, per tal de saber l'estat de la nostra instal·lació, les versions dels llenguatges i sistema operatiu, etc:


# drush core-status

Drupal version : 7.50
Site URI : http://default
Database driver : mysql
Database username : joan
Database name : drupal1_db
Database : Connected
Drupal bootstrap : Successful
Drupal user : Anonymous
Default theme : bartik
Administration theme : seven
PHP executable : /usr/local/bin/php
PHP configuration :
PHP OS : FreeBSD
Drush version : 6.5.0
Drush configuration :
Drush alias files :
Drupal root : /usr/local/www/apache24/data
Site path : sites/default
File directory path : sites/default/files
Temporary file directory path : /tmp

A partir d'ara, no cal anar ficant les respotes, simplement explique breument què fa cada ordre principal de Drush. Comencem.

Quins mòduls tinc instal·lat?


drush pml

Quins mòduls tinc a /sites/all/modules?


drush pm-list --type=Module

Quins themes tinc a /sites/all/themes?


drush pm-list --type=Theme

artícles
17

Clean URLs / URLs netes de Drupal a l'Apache amb FreeBSD

Image
Body

Ja siga si tens un únic lloc web o tens una configuració de virtual hosts a l'Apache (versió 2.4, en el meu cas), per a tenir les URLs netes cal activar el mod_rewrite de l'Apache.

Editarem /usr/local/etc/apache24/httpd.conf i descomentem:


LoadModule rewrite_module libexec/apache24/mod_rewrite.so

Reiniciem el servei de l'Apache, i ja pots configurar les URLs netes des de Drupal.

artícles
17

Amagant el filtre de Mantis per defecte i per a tots els usuaris

Body

filtre d'opcions de Mantis Bug Tracker

Ahir vam configurar el Mantis Bug Tracker que tenim a la feina per a que, per defecte, sempre amague el filtre de les cerques, per a tots els usuaris, els ja existents i els nous, i encara que un usuari l'active, una vegada torne a entrar es tornarà a veure amagat i l'haurà d'activar manualment.

Al GitHub vam veure que un desenvolupador publica unes línies que ens solventen aquesta funcionalitat: https://github.com/vboctor/mantisbt/blob/e29df5edcc806cb4ba9418bbedfd1d…

Per defecte, al fitxer /core/collapse_api.php veiem el següent:


if( !is_null( $t_token ) ) {
$t_data = unserialize( $t_token );
} else {
$t_data = array();
}

artícles
17

Netejar la memòria caché de moltes webs Drupal al vol

Body

Al treball mantenim una estructura de més de 110 projectes webs desenvolupats amb Drupal 7.x. Avui ens calia fer neteja ràpida de caché i no tenim drush al servidor. Tal com he mirat a https://www.drupal.org/documentation/clearing-rebuilding-cache, m'he fet un script en PHP adaptat a la nostra versió i l'he deixat a totes les webs:


// Define static var.
define('DRUPAL_ROOT', getcwd());
// Include bootstrap.
include_once('./includes/bootstrap.inc');
// Initialize stuff.
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// Clear cache.
drupal_flush_all_caches();
?>

I a continuació, en 5 minuts he preparat un script bàsic bash per a que execute l'script php directament contra cada una de les webs del projecte. No he afegit echos ni floritures, perquè era una qüestió prou urgent:


lynx --dump http://www.web1.es/netejar_cache.php > /dev/null
lynx --dump http://www.web2.es/netejar_cache.php > /dev/null
lynx --dump http://www.web3.es/netejar_cache.php > /dev/null
lynx --dump http://www.web4.es/netejar_cache.php > /dev/null
lynx --dump http://www.web5.es/netejar_cache.php > /dev/null

artícles
17

View de Drupal 7 que fa un sumatori de tots els diferents tipus de contingut

Body

Ací un snippete per a importar des de Views:


$view = new view;
$view->name = 'nodecounts';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'Node counts';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'Node counts';
$handler->display->display_options['group_by'] = TRUE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['query']['options']['query_comment'] = FALSE;
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'none';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
$handler->display->display_options['row_options']['inline'] = array(
'type_1' => 'type_1',
'type' => 'type',
);
$handler->display->display_options['row_options']['separator'] = ': ';
$handler->display->display_options['row_options']['hide_empty'] = 0;
$handler->display->display_options['row_options']['default_field_elements'] = 1;
/* Field: Content: Type */
$handler->display->display_options['fields']['type_1']['id'] = 'type_1';
$handler->display->display_options['fields']['type_1']['table'] = 'node';
$handler->display->display_options['fields']['type_1']['field'] = 'type';
$handler->display->display_options['fields']['type_1']['label'] = '';
$handler->display->display_options['fields']['type_1']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['external'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['type_1']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['type_1']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['trim'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['html'] = 0;
$handler->display->display_options['fields']['type_1']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['type_1']['element_default_classes'] = 1;
$handler->display->display_options['fields']['type_1']['hide_empty'] = 0;
$handler->display->display_options['fields']['type_1']['empty_zero'] = 0;
$handler->display->display_options['fields']['type_1']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['type_1']['link_to_node'] = 0;
$handler->display->display_options['fields']['type_1']['machine_name'] = 0;
/* Field: COUNT(Content: Type) */
$handler->display->display_options['fields']['type']['id'] = 'type';
$handler->display->display_options['fields']['type']['table'] = 'node';
$handler->display->display_options['fields']['type']['field'] = 'type';
$handler->display->display_options['fields']['type']['group_type'] = 'count';
$handler->display->display_options['fields']['type']['label'] = '';
$handler->display->display_options['fields']['type']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['type']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['type']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['type']['alter']['external'] = 0;
$handler->display->display_options['fields']['type']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['type']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['type']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['type']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['type']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['type']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['type']['alter']['trim'] = 0;
$handler->display->display_options['fields']['type']['alter']['html'] = 0;
$handler->display->display_options['fields']['type']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['type']['element_default_classes'] = 1;
$handler->display->display_options['fields']['type']['hide_empty'] = 0;
$handler->display->display_options['fields']['type']['empty_zero'] = 0;
$handler->display->display_options['fields']['type']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['type']['separator'] = '';
$handler->display->display_options['fields']['type']['format_plural'] = 0;

/* Display: Block */
$handler = $view->new_display('block', 'Block', 'block');

artícles
17
Subscribe to categoria-drupal-i-php