Articoli

CodeIgniter, Aruba e .htaccess

Chi utilizza Aruba per i propri progetti realizzati in CodeIgniter, si sarà trovato sicuramente di fronte al fatidico messaggio di errore “No input file specified”.

Innanzitutto specifichiamo che la nostra versione di PHP deve essere almeno la 5.3.
Detto cio’, cerchiamo di capire come far funzionare correttamente la nostra piattaforma.

Il problema sta nella cattiva interpretazione delle URL, le quali, non venendo “intercettate” nel modo corretto, non fanno funzionare nel modo opportuno il mod_rewrite di Apache.

La cosa anomala è che omettendo la dicitura “index.php” all’interno delle URL e attivando la funzionalità di riscrittura di Apache, tutto funziona correttamente.

Come risolvere questa situazione?

Impostiamo il file .htaccess, presente nella root del nostro progetto, in questo modo:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]
</IfModule>

La differenza fondamentale rispetto ad un “normale” mod_rewrite sta nella presenza del ? dopo ogni index.php. Questa permette di intercettare e quindi di interpretare in maniera corretta la URL.

Come ultima cosa, assicuariamoci che il file config.php (presente nella cartella application/folder) alla riga 29 abbia questa impostazione: $config[‘index_page’] = ”;.

Hai bisogno di consulenza su questo argomento?

 

 

Come visualizzare la percentuale di sconto in Magento

Capita spesso che un cliente richieda la visualizzazione, oltre al prezzo pieno ed a quello speciale, anche della percentuale di sconto applicata ad un articolo.

In Magento questa opzione non è contemplata (o meglio “automatizzata”) nel pannello di amministrazione, dobbiamo quindi aggiungere “a mano” del codice che ci permetta la visualizzazione della label con la percentuale di sconto applicata.

Il codice qui di seguito va aggiunto al file catalog/product/view.phtml del template in uso:

/* Visualizza Percentuale Sconto */
$percentuale_sconto = ceil(100 - (( 100/$_product->getPrice() ) * $_product->getFinalPrice() ));
if($percentuale_sconto > 0){
echo 'Risparmi il '.$percentuale_sconto.' %';
}
/* Fine - Visualizza Percentuale Sconto */

In pratica, non facciamo altro che calcolare e visualizzare la percentuale di sconto a partire dal prezzo speciale, se questo è stato impostato.

C’è però da notare una cosa: quanto appena descritto visualizzerà lo sconto nella sola pagina di dettaglio del prodotto!

Nella lista/griglia non troveremo alcuna traccia delle modifiche effettuate.
Perchè lo sconto venga visualizzato in tutte le pagine, il file da modificare sarà catalog/product/price.phtml (testato in Magento versione 1.8.1.0).

 

Richiedi, senza alcun impegno, una nostra consulenza, sapremo aiutarti nella realizzazione del tuo progetto.

 

 

Image CRUD: gallerie immagini in un lampo

Eccoci nuovamente a parlare del framework CodeIgniter (chi non lo conoscesse, può leggere un brevissimo articolo qui: http://www.walkermanstudio.com/codeigniter-framework-php-tuttofare), più precisamente di una libreria che ci aiuterà non poco durante la realizzazione dei nostri progetti.

Se dovessimo realizzare una galleria immagini per un sito, un’applicazione web, dovremmo sicuramente pensare a come presentare il frontend (ordinamento in griglia oppure tramite lista? E’ meglio realizzare le anteprime? E le didascalie? Mentre per gli album?), ma dovremmo soprattutto considerare la parte gestionale… lavoro non poco complesso e non proprio immediato: upload di file singoli e/o multipli, restrizioni sulla tipologia di file, gestione degli album, ridimensionamento delle immagini, etc…

Bene… in aiuto ci viene una libreria che promette (e, aggiungiamo, mantiene) di velocizzare la creazione di gallerie immagini e la loro gestione.

La libreria in questione è Image CRUD. Integrabile facilmente in Codeigniter, con pochissime righe di codice avremo un CRUD (Create, Read, Update, Delete) veloce e flessibile.

Vediamo insieme alcune delle principali funzionalità di Image CRUD:

– selezione e upload multiplo di immagini
– generazione automatica delle anteprime
– ordinamento “drag&drop” delle immagini
– inserimento didascalia
– raggruppamento immagini (creazione album)

Tutto questo si ottiene riportando nel vostro controller questa semplicissima funzione (esempio presente nella documentazione ufficiale):
function example1()
{
$image_crud = new image_CRUD();

// indichiamo la tabella che nel nostro database conterrà i riferimenti ai file sul server
$image_crud->set_table(‘example_1’);

// indichiamo il campo “chiave primaria” della nostra tabella poc’anzi descritta
$image_crud->set_primary_key_field(‘id’);

// indichiamo il campo, autogenerato, per l’url all’immagine
$image_crud->set_url_field(‘url’);

// indichiamo il percorso “contenitore” delle nostre immagini
$image_crud->set_image_path(‘assets/uploads’);

// generiamo il codice, pronto per essere visualizzato
$output = $image_crud->render();

// et voilà!
$this->_example_output($output);
}

La documentazione ed altri esempi presenti sul sito degli sviluppatori ci insegnano ad eseguire un ordinamento (set_ordering_field()), utilizzare una “categoria” per le nostre immagini (set_relation_field()) e ad impostare un titolo (set_title_field())

Come integrarlo in Codeigniter?
Innanzitutto recatevi sul sito ufficiale e scaricate l’ultima versione disponibile:
http://www.grocerycrud.com/image-crud/download

Scompattate l’archivio, contenente le cartelle “application” e “assets”, nella root del vostro progetto Codeigniter.
Troverete un controller ed una view che forniscono tutti gli esempi per poter iniziare ad utilizzare la libreria.
Unica accortezza è quella di creare la tabella, che conterrà i dati delle nostre immagini, nel database e, se pensate di utilizzarla, la tabella delle “categorie”.

 

Richiedi, senza alcun impegno, una nostra consulenza, sapremo aiutarti nella realizzazione del tuo progetto.

 

 

Integrare WordPress in CodeIgniter (parte 2)

Continuiamo a parlare di WordPress e dell’integrazione di alcune delle sue funzionalità in CodeIgniter (per sapere cos’è CodeIgniter leggi l’articolo Codeigniter: framework PHP tuttofare)

Nell’articolo Integrare WordPress in Codeigniter (parte 1) abbiamo visto come andare ad interfacciare CodeIgniter al core di Wordrpess e soddisfare la prima delle due richieste fatte dal nostro ipotetico Cliente, cioè visualizzare anteprima di immagine e testo, e link di un determinato articolo in una determinata pagina.

Ora cercheremo di integrare, invece, la seconda richiesta: visualizzare l’elenco degli ultimi post del blog nel footer.
Utilizzeremo la funzione “wp_get_recent_posts()” di WordPress nel seguente modo:

<ul>
<?php
$post_recenti = wp_get_recent_posts();
foreach( $post_recenti as $recenti ){
if($recenti[‘post_status’]!=’draft’)
echo ‘<li>’.get_the_post_thumbnail($recenti[‘ID’], array(50,50)).'<a href=”‘.get_permalink($recenti[“ID”]).'” title=”‘.esc_attr($recenti[“post_title”]).'” >’.textPreview($recenti[“post_title”], 27).'</a></li> ‘;
}
?>
</ul>

Come vediamo, l’elenco si ottiene attraverso un ciclo foreach, col quale cicliamo l’array “$post_recenti”, nel quale ritroviamo, grazie alla suddetta funzione “wp_get_recent_posts()”, l’elenco degli ultimi post presenti nel blog.

Va detto, però, che la funzione ci restituisce tutti gli articoli, anche quelli con lo stato di “bozza”, perciò l’istruzione “if($recenti[‘post_status’]!=’draft’)” ci permette di filtrare i soli post pubblicati.

Nella riga successiva non facciamo altro che stampare, all’interno dei tag <li> e </li>, immagine 50×50 pixel, link e anteprima del testo del nostro post (abbiamo spiegato cos’è textPreview() nella parte 1).

Racchiudiamo il codice PHP all’interno dei tag <ul> e </ul>, applichiamo il nostro foglio di stile ed ecco ottenuto il nostro elenco.

Integrare WordPress in CodeIgniter

Si sta realizzando una piattaforma attraverso il framework CodeIgniter e il Cliente dice:
“…vorrei che si vedessero immagine, anteprima dell’articolo e link del post ‘X’ in una determinata pagina e l’elenco degli ultimi post pubblicati sul blog nel footer…”

Per utilizzare le funzionalità di WordPress, dobbiamo in qualche modo interfacciarci al suo “core”, un po’ come abbiamo letto nell’articolo Integrare il carrello acquisti di Magento in WordPress, dove la necessità era l’integrazione di una funzionalità di Magento in WordPress.

Bene, iniziamo.

Apriamo il file index.php presente nella root del progetto CodeIgniter ed inseriamo, prima di qualsiasi altra cosa, le seguenti righe di codice:

define(‘WP_USE_THEMES’, false);
require(‘blog/wp-load.php’);

La prima riga indica a WordPress, nel momento in cui viene inizializzato, di non utilizzare il tema/template attualmente in uso (parametro impostato su “false”).

Nella seconda riga includiamo/importiamo il file “wp-load.php”, attraverso il quale potremo utilizzare le funzionalità del blog WordPress.

Fatto ciò, andremo nella “view” di CodeIgniter per aggiungere il codice necessario a visualizzare ciò che ci interessa.

Vediamo come soddisfare la prima richiesta del nostro Cliente: visualizzare le informazioni di uno specifico post..

Premessa: dobbiamo conoscere gli ID del post da visualizzare.

Abbiamo due modi:
1. utilizziamo un plugin;
2. nel back end di WP, nell’elenco dei post, passiamo col mouse sull’elemento che ci interessa e leggiamo, nella barra di stato del nostro browser, il numero dopo il testo “post=” (es.: post=123). Quel valore numerico indica l’ID del nostro post!

Recuperato l’ID, passiamo al codice e analizziamolo riga per riga.

$post_id=123;
$post_data=wp_get_single_post($post_id, ARRAY_A);
echo $post_data[‘post_title’];
echo ‘<a href=” ‘.get_permalink($post_id).'”>’.get_the_post_thumbnail($post_id, array(320, 240)).'</a>’;
echo “<p>”.textPreview(strip_tags($post_data[‘post_content’]), 150).”</p>”;
echo ‘<a href=”‘.get_permalink($post_id).'”>Leggi l’articolo completo </a>’;

Partiamo indicando il post del quale leggeremo i dati, nel nostro esempio quello con ID uguale a 123.

Recuperiamo tutte le informazioni del suddetto post tramite la funzione, messa a disposizione dalle API di WordPress, wp_get_single_post($postid, $mode) (ATTENZIONE: dalla versione 3.5 di WordPress questa funzione è deprecata! Al suo posto si può utilizzare la funzione get_post()).

Tale funzione prende come parametri l’ID del post da caricare e la modalità nella quale le informazioni devono essere restituite.
Abbiamo scelto di avere come risultato un array associativo. Le altre modalità sono: OBJECT e ARRAY_N.

Nella nostra variabile $post_data, quindi, avremo tutte le informazioni del post. Non elenchiamo tutti i campi ma focalizziamo l’attenzione solo su quelli che ci interessano:
– post_title
– post_content

In più, utilizzando altre funzioni andremo a prelevare informazioni quali il link e l’immagine di anteprima del post.
Andando per ordine
$post_data[‘post_title’] è il titolo del post
$post_data[‘post_content’] è il contenuto del post

Il resto del codice…

echo ‘<a href=” ‘.get_permalink($post_id).'”>’.get_the_post_thumbnail($post_id, array(320, 240)).'</a>’;

Non facciamo altro che visualizzare l’immagine del post, rendendola cliccabile.

get_the_post_thumbnail($post_id, array(320, 240))

restituisce l’immagine del post. Il primo parametro è l’ID del post, il secondo è riferito alle dimensioni di visualizzazione dell’immagine (noi abbiamo scelto 320×240 pixel; attenzione alle proporzioni!).

Impostiamo poi la proprietà href del tag <a> con il link al nostro post tramite la funzione get_permalink(). Anche qui dobbiamo indicare l’ID.

textPreview(strip_tags($post_data[‘post_content’]), 150)

Qui abbiamo utilizzato una funzione PHP scritta ad hoc per accorciare il testo del post. I parametri passati alla funzione sono il contenuto del post ($post_data[‘post_content’]) e la lunghezza massima del testo da visualizzare. Inoltre vogliamo “pulire” il codice da eventuali tag aggiunti durante l’inserimento del testo da WordPress.

Utilizziamo per questo compito la funzione PHP strip_tags().

echo ‘<a href=”‘.get_permalink($post_id).'”>Leggi l’articolo completo </a>

Ques’ultima riga ci permette di creare un link al post del blog.

Non ci resta che uniformare la visualizzazione allo stile del sito ed il nostro primo step è completato!

Nel prossimo articolo vedremo come realizzare la successiva richiesta del nostro Cliente, ovvero visualizzare l’elenco degli ultimi post del blog nel footer…

Integrare il carrello acquisti di Magento in WordPress

Un nostro recente progetto ha interessato due delle più famose e utilizzate piattaforme open-source, WordPress e Magento (rispettivamente CMS ed E-commerce).
Una delle necessità era quella di visualizzare, nel blog, il numero di articoli attualmente nel carrello dello store.
Di seguito un breve riassunto dei passi necessari per effettuare il suddetto adattamento.
Precisiamo che esistono alcuni plugin, per citarne uno FishPig, che rendono tale integrazione automatica.
Iniziamo con alcune informazioni:

1. I cookies del “frontend” di Magento non sono accessibili al di fuori di Magento stesso. Questo rende i dati di sessione dell’ambiente ecommerce inaccessibili da una directory diversa da quella di installazione. Bisogna modificare dal pannello amministratore di Magento il percorso dei cookies (Sistema>Configurazione>Web>Sessione gestione Cookie) così che siano resi disponibili in un percorso comune a, in questo caso, WordPress. Nel nostro caso abbiamo utilizzato la root “/”.
2. Si deve conoscere il percorso del file “Mage.php” contenuto nella cartella “app” di Magento.
3. Bisogna conoscere l’identificativo dello store Magento del quale si vogliono recuperare i dati. Per conoscere l’id, da pannello di controllo andare in “Sistema>Gestione negozi”, posizionare il cursore del mouse sulla riga relativa allo store interessato (ultima colonna a destra “Nome vista negozio”) e leggere dall’URL il valore numerico (es.: …system_store/editStore/store_id/1/key/…).
4. La nostra configurazione prevedeva WordPress installato nella root del dominio, mentre Magento risiedeva nella sottodirectory “shop”.

Il codice riportato di seguito è stato inserito nel file “header.php” del tema attivo in WordPress, ma può essere inserito laddove vi sia necessità:

// richiediamo il file core Magento dal percorso di installazione dell’ecommerce
require_once(“shop/app/Mage.php”);

// comando per l’assegnazione dei permessi
umask(0);

// metodo Magento per impostare lo store di default, nel nostro caso lo store con id “1”.
Mage::app()->setCurrentStore(1);

// metodo che ci permette di recuperare un “oggetto” dall’ambiente Magento, in questo caso le sessioni del fronted
Mage::getSingleton(‘core/session’, array(‘name’=>’frontend’));

// con questa riga assegnamo ad una variabile il numero di articoli attualmente presenti nel carrello di Magento
$numArticoli=Mage::getSingleton(‘checkout/cart’)->getItemsCount();

Con poche righe è possibile, quindi, recuperare informazioni dalla piattaforma Magento e visualizzarle, modificando opportunamente il codice, direttamente in WordPress.

CodeIgniter: framework PHP tuttofare

CodeIgniter è un framework di sviluppo open source per applicazioni e siti web dinamici scritti utilizzando il linguaggio PHP (5.1.6 e versioni successive).

E’ basato sull’architettura MVC (Model-View-Controller), che permette una netta separazione tra la logica e la visualizzazione dei dati.

Sono supportati vari DBMS quali MySQL, MySQLi (questi sicuramente i più utilizzati), MS SQL, Postgres, Oracle, SQLite e ODBC.

I punti di forza di questo strumento sono sicuramente le ottime prestazioni che offre, step di configurazione minimi, ottima documentazione sia ufficiale che della community.

Se aggiungiamo le ridotte dimensioni (poco più di 2Mb per la versione 2.1.4), il supporto per lo scaffolding, la possibilità di utilizzare database multipli, il caching, classi per l’utilizzo nativo di FTP, email, validazione, compressione e altre piccole ma utili caratteristiche, si capisce bene di quale ottimo tool stiamo parlando.

CodeIgniter è sicuramente la soluzione ottimale per coloro che si avvicinano al modello MVC, in quanto la curva di apprendimento è molto piccola.

Probabilmente per la realizzazione di progetti, diciamo, più impegnativi, sarebbe opportuno l’utilizzo di altri framework.

Il primo della lista sarebbe sicuramente Lavarel!

Guardate un po’ questo grafico…

chart_php_framework

jQuery e AJAX in WordPress

Veniamo subito al dunque: si deve utilizzare codice PHP richiamato da una pagina, senza che questa venga ricaricata (chiamata asincrona).

In WordPress è possibile fare una cosa del genere? La risposta è SI.

Se creo un file PHP e lo salvo nella cartella del tema corrente di WordPress, all’interno dello stesso file non potrò utilizzare alcuna funzione nativa di WordPress… se non faccio prima alcune operazioni.

Per iniziare: i file che modificheremo si trovano nella cartella del tema attivo: …wp-content/themes/NOME_TEMA_ATTIVO

Dobbiamo, come prima cosa, scrivere nella sezione “head” del nostro file “header.php” il codice necessario ad includere il file admin-ajax.php.

Questo file, appartenente alle API di WordPress, non fa altro che prendere in consegna le chiamate AJAX, sia del frontend che del backend, e restituirne le risposte.

Ritornando al codice da inserire nel file header.php:

Fatto ciò, se non lo abbiamo già fatto, creiamo il file .php che fornirà le informazioni da visualizzare (risposta alla chiamata partita dalla pagina…). Per nostra comodità, nominiamo il file ajax_response.php e lo inseriamo sempre nella cartella del nostro tema attivo WordPress.

A questo punto dobbiamo “far capire” a WordPress che vogliamo utilizzare il suddetto file. Possiamo farlo aggiungendo un hook nel file functions.php:

function use_ajax() {
include(TEMPLATEPATH . '/ajax_response.php');
}
add_action('wp_ajax_my_action', 'use_ajax');
add_action('wp_ajax_nopriv_my_action', 'use_ajax');

Ora siamo pronti ad effettuare la chiamata AJAX, utilizzando jQuery, dal file interessato (es.: popolamento dropdown).
Il nostro codice sarà, quindi, simile a:

Per finire, un semplice schema che riepiloga il funzionamento delle chiamate asincrone AJAX da una pagine del tema corrente WordPress.

Schema chiamate AJAX in WordPress

Richiedi, senza alcun impegno, una nostra consulenza, sapremo aiutarti nella realizzazione del tuo progetto.

Elementi di portfolio