Andres Hunger UX Web designer  
WINNER OF THE DAY Featured of the Day



Translate

Pages

Codeanywhere cloud editor

/codeanywher

 

Codeanywhere editor e sviluppo con tutta la velocita del cloud

Codeanywhere potente Web editor e ambiente di sviluppo integrato,  ha tutte le caratteristiche di un desktop IDE, ma con caratteristiche aggiuntive che  solo un'applicazione cloud può dare!
Editor associato al sistema operativo Chrome OS nato appunto per lesigenza di sviliuppare in piena libertà ed ovunque...

 

CodeAnywhere utilizza un modello freemium, in cui gli utenti possono pagare $ 5 al mese o $ 50 all'anno per gli aggiornamenti come FTP illimitati, FTPS e SFTP. Nei prossimi mesi, Burazin e Jukic dicono che il team dovrà lavorare a nuove funzionalità offline e integrazioni con i servizi di terze parti come Github.

 

undefined

Sviluppo

Una delle cose molto interessanti e la possibilità di scegliere l'ambinate di sviluppo, dai CMS più utilizzati Wordpress, Magento, Drupal a linguaggi di programmazione PHP,Java, C++.. e molto altro come AngularJS.

codeanywhere sviliuppo

Sulla sinistra possiamo vedere come gestire i nosrtri progretti con i relativi file.
L'interfaccia di lavoro è molto semolice e chiara degna di un potente editor! assomiglia molto a Sublime text

codeanywhere editor

 Non ci resta che provarlo!
Lini:codeanywhere.com

 

 

Nginx configurare W3TC Browser Cache

wordpress nginx 

Configurare file nginx.conf per W3TC Browser Cache

Migrare da un web server Apache a un web server Nginx, potrebbe complicarci la vita?
Direi di no su molti aspetti... ora il nostro file .htaccess non ci serve più, pertanto andiamo a scrivere le nostre richieste all'interno del file nginx.conf .

Nel caso all'interno del nostro Wordpress avessimo caricato il plugin W3 Total Cache non ci resta che scrivere all'interno del nostro nginx.conf le seguenti istruzioni:

# BEGIN W3TC Browser Cache
gzip on;
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/bmp application/java application/msword application/vnd.ms-fontobject application/x-msdownload image/x-icon application/json application/vnd.ms-access application/vnd.ms-project application/x-font-otf application/vnd.ms-opentype application/vnd.oasis.opendocument.database application/vnd.oasis.opendocument.chart application/vnd.oasis.opendocument.formula application/vnd.oasis.opendocument.graphics application/vnd.oasis.opendocument.spreadsheet application/vnd.oasis.opendocument.text audio/ogg application/pdf application/vnd.ms-powerpoint application/x-shockwave-flash image/tiff application/x-font-ttf audio/wav application/vnd.ms-write application/font-woff application/font-woff2 application/vnd.ms-excel;
# END W3TC Browser Cache

Come potete vedere abbiamo attivato la compressione gzip.

PhpList Email list management software

phplist Andres Hunger

 

L'importanza di un giusto software email management PhpList

PhpList è uno strumento open source per la gestione di liste di sottoscrizione. È scritto nel
linguaggio di programmazione 'php', ed è utilizzato per diffondere informazioni a un gran numero
di utenti. I destinatari che riceveranno i contenuti sono chiamati Sottoscrittori. I Sottoscrittori sono
membri delle Liste, mentre gli utenti che creano i contenuti da diffondere utilizzando phpList, sono
gli Amministratori. I contenuti inviati tramite e-mail sono noti come Messaggi della Campagna.
Facile da utilizzare e si integra bene su ogni soluzione web, possibile integrazione su Wordpress.

Amministratore

L'amministratore (Admin in breve) è l'utente del sistema che gestisce phpList. E' responsabile della
configurazione, gestione liste, statistiche, invio dei messaggi della campagna, e può usufruire della
piena funzionalità di phpList. Un amministratore ha un login e una password che permette di
accedere alle funzioni amministrative di phpList (aka il backend ). Ci sono due diversi livelli di
amministratore, un SuperAdmin con tutti i diritti e le funzionalità del sistema, e gli amministratori
che gestiscono liste specifiche.
Sottoscrittore (Utente)
phpList supporta un concetto molto flessibile di "appartenenza". I Sottoscrittori sono identificati
principalmente da un indirizzo email registrato nel database di phpList. Ogni indirizzo e-mail
rappresenta un sottoscrittore e ogni sottoscrittore è memorizzato con propri attributi. Cioè, un
sottoscrittore è individuato da un indirizzo email più preferenze specifiche, come ad esempio
"Voglio sempre le email HTML" e, inoltre, tutti gli attributi (nome, indirizzo, professione , ecc )
scelti dall'Amministratore. Gli attributi possono essere liberamente creati dall'Amministratore senza
limiti e un Sottoscrittore può essere membro di più Liste.
Per impostazione predefinita (a meno che l'amministratore approvi manualmente), i Sottoscrittori
non cominciano a ricevere messaggi fino a che confermano la loro adesione (Double Opt-in). Non
appena si iscrive ad una Lista, un Sottoscrittore riceve un messaggio di richiesta di conferma
all'indirizzo email fornito. In questo messaggio sarà presente un link che, una volta cliccato, consente di riconoscere e confermare l'iscrizione alla Lista. La rinuncia alla sottoscrizione di una
Lista (Opt-out), invece, è un processo a singolo step. 

Lista

Una lista ha un titolo e dei sottoscrittori. Il titolo è creato dall'Amministratore e i sottoscrittori si
registrano come scritto al punto precedente. Le Liste hanno Messaggi e Utenti (Sottoscrittori). Le
Liste vengono usate per inviare messaggi dall'Amministratore al Sottoscrittore. Non è un forum di
discussione

Relazione tra Sottoscrittore e Lista

C'è una relazione "molti-a-molti" tra Liste e Sottoscrittori, il che significa che ogni Lista può avere
molti Sottoscrittori, e ogni Sottoscrittore può appartenere a molte Liste. Ciò è evidente in siti che
usano phpList per gestire più liste correlate. I sottoscrittori hanno la possibilità di diventare membri
di una o di tutte o di un gruppo di liste.

Relazione tra Amministratore e Lista

Ogni lista è di proprietà di un solo amministratore, ma ogni amministratore può possedere diverse
liste. Un amministratore non può inviare un messaggio a liste di proprietà di altri amministratori.
Importante: Ogni amministratore può avere accesso solo ai file delle persone che hanno sottoscritto
almeno una tra le liste che amministrano. A differenza degli amministratori, i SuperAdmin hanno
accesso a tutti i sottoscrittori ed a tutte le liste.

Campagna di Messaggi e Modelli

Una Campagna di Messaggi è una singola e-mail (evento) inviata ai Membri/Sottoscrittori di una o più liste. Un Messaggio può utilizzare un Modello o si può inserire il contenuto del messaggio tutto in una volta, inserendo direttamente il codice HTML. In generale, un singolo messaggio viene inviato solo una volta per ciascun sottoscrittore. In altre parole, se un amministratore invia lo stesso messaggio a più elenchi (che condividono gli stessi iscritti), ciascun abbonato in tali liste riceve quel messaggio una sola volta.

Download phpList

 

Breadcrumbs su WordPress

Sviluppo Breadcrumbs Wordpress

Come aggiungere i Breadcrumbs su WordPress senza l'uso di plugin

Le breadcrumbs, assumo un’importanza sempre maggiore, poichè aiutano utenti e motori di ricerca a comprendere la struttura di un sito.
Soprattutto all'interno di un piccolo-sito o e-commerce woocommerce,
implementando questo codice all'interno del file function.php del proprio tema:
(fate sempre una copia del file function.php, meglio nel tema child)

function the_breadcrumb () {

// Settings 
$separator  = '>';
$id         = 'breadcrumbs';
$class      = 'breadcrumbs';
$home_title = 'Homepage';

// Get the query & post information
global $post,$wp_query;
$category = get_the_category();

// Build the breadcrums
echo '<ul id="' . $id . '" class="' . $class . '">';
// Do not display on the homepage
if ( !is_front_page() ) {

// Home page
echo '<li class="item-home"><a class="bread-link bread-home" href="' . get_home_url() . '" title="' . $home_title . '">' . $home_title . '</a></li>';
echo '<li class="separator separator-home"> ' . $separator . ' </li>';

if ( is_single() ) {

// Single post (Only display the first category)
echo '<li class="item-cat item-cat-' . $category[0]->term_id . ' item-cat-' . $category[0]->category_nicename . '"><a class="bread-cat bread-cat-' . $category[0]->term_id . ' bread-cat-' . $category[0]->category_nicename . '" href="' . get_category_link($category[0]->term_id ) . '" title="' . $category[0]->cat_name . '">' . $category[0]->cat_name . '</a></li>';
echo '<li class="separator separator-' . $category[0]->term_id . '"> ' . $separator . ' </li>';
echo '<li class="item-current item-' . $post->ID . '"><strong class="bread-current bread-' . $post->ID . '" title="' . get_the_title() . '">' . get_the_title() . '</strong></li>';

} else if ( is_category() ) {

// Category page
echo '<li class="item-current item-cat-' . $category[0]->term_id . ' item-cat-' . $category[0]->category_nicename . '"><strong class="bread-current bread-cat-' . $category[0]->term_id . ' bread-cat-' . $category[0]->category_nicename . '">' . $category[0]->cat_name . '</strong></li>';

} else if ( is_page() ) {

// Standard page
if( $post->post_parent ){

// If child page, get parents
$anc = get_post_ancestors( $post->ID );

// Get parents in the right order
$anc = array_reverse($anc);

// Parent page loop
foreach ( $anc as $ancestor ) {
$parents .= '<li class="item-parent item-parent-' . $ancestor . '"><a class="bread-parent bread-parent-' . $ancestor . '" href="' . get_permalink($ancestor) . '" title="' . get_the_title($ancestor) . '">' . get_the_title($ancestor) . '</a></li>';
$parents .= '<li class="separator separator-' . $ancestor . '"> ' . $separator . ' </li>';
}

// Display parent pages
echo $parents;

// Current page
echo '<li class="item-current item-' . $post->ID . '"><strong title="' . get_the_title() . '"> ' . get_the_title() . '</strong></li>';

} else {

// Just display current page if not parents
echo '<li class="item-current item-' . $post->ID . '"><strong class="bread-current bread-' . $post->ID . '"> ' . get_the_title() . '</strong></li>';

}

} else if ( is_tag() ) {

// Tag page

// Get tag information
$term_id = get_query_var('tag_id');
$taxonomy = 'post_tag';
$args ='include=' . $term_id;
$terms = get_terms( $taxonomy, $args );

// Display the tag name
echo '<li class="item-current item-tag-' . $terms[0]->term_id . ' item-tag-' . $terms[0]->slug . '"><strong class="bread-current bread-tag-' . $terms[0]->term_id . ' bread-tag-' . $terms[0]->slug . '">' . $terms[0]->name . '</strong></li>';

} elseif ( is_day() ) {

// Day archive

// Year link
echo '<li class="item-year item-year-' . get_the_time('Y') . '"><a class="bread-year bread-year-' . get_the_time('Y') . '" href="' . get_year_link( get_the_time('Y') ) . '" title="' . get_the_time('Y') . '">' . get_the_time('Y') . ' Archives</a></li>';
echo '<li class="separator separator-' . get_the_time('Y') . '"> ' . $separator . ' </li>';

// Month link
echo '<li class="item-month item-month-' . get_the_time('m') . '"><a class="bread-month bread-month-' . get_the_time('m') . '" href="' . get_month_link( get_the_time('Y'), get_the_time('m') ) . '" title="' . get_the_time('M') . '">' . get_the_time('M') . ' Archives</a></li>';
echo '<li class="separator separator-' . get_the_time('m') . '"> ' . $separator . ' </li>';

// Day display
echo '<li class="item-current item-' . get_the_time('j') . '"><strong class="bread-current bread-' . get_the_time('j') . '"> ' . get_the_time('jS') . ' ' . get_the_time('M') . ' Archives</strong></li>';

} else if ( is_month() ) {

// Month Archive

// Year link
echo '<li class="item-year item-year-' . get_the_time('Y') . '"><a class="bread-year bread-year-' . get_the_time('Y') . '" href="' . get_year_link( get_the_time('Y') ) . '" title="' . get_the_time('Y') . '">' . get_the_time('Y') . ' Archives</a></li>';
echo '<li class="separator separator-' . get_the_time('Y') . '"> ' . $separator . ' </li>';

// Month display
echo '<li class="item-month item-month-' . get_the_time('m') . '"><strong class="bread-month bread-month-' . get_the_time('m') . '" title="' . get_the_time('M') . '">' . get_the_time('M') . ' Archives</strong></li>';

} else if ( is_year() ) {

// Display year archive
echo '<li class="item-current item-current-' . get_the_time('Y') . '"><strong class="bread-current bread-current-' . get_the_time('Y') . '" title="' . get_the_time('Y') . '">' . get_the_time('Y') . ' Archives</strong></li>';

} else if ( is_author() ) {

// Auhor archive

// Get the author information
global $author;
$userdata = get_userdata( $author );

// Display author name
echo '<li class="item-current item-current-' . $userdata->user_nicename . '"><strong class="bread-current bread-current-' . $userdata->user_nicename . '" title="' . $userdata->display_name . '">' . 'Author: ' . $userdata->display_name . '</strong></li>';

} else if ( get_query_var('paged') ) {

// Paginated archives
echo '<li class="item-current item-current-' . get_query_var('paged') . '"><strong class="bread-current bread-current-' . get_query_var('paged') . '" title="Page ' . get_query_var('paged') . '">'.__('Page') . ' ' . get_query_var('paged') . '</strong></li>';

} else if ( is_search() ) {

// Search results page
echo '<li class="item-current item-current-' . get_search_query() . '"><strong class="bread-current bread-current-' . get_search_query() . '" title="Search results for: ' . get_search_query() . '">Search results for: ' . get_search_query() . '</strong></li>';

} elseif ( is_404() ) {

// 404 page
echo '<li>' . 'Error 404' . '</li>';
}

}

echo '</ul>';

}

?>

Inserire un’altro codice nel template per richiamare la funzione, nella posizione nella quale vogliamo che i breadcrumbs siano mostrati:

<?php the_breadcrumb(); ?> 

In seguito agiremo via CSS...

Woocommerce select attributi dettaglio prodotto

Grazie a jQuery possiamo interagire e trasfomare il <select>

WordPress con il plugin Woocommerce è una buona soluzione per un piccolo e-shop/e-commerce, spesso però nel dettaglio prodotto abbiamo diverse necessità.
Woocommerce gestisce gli attributi delle variabili in <select> questo script permette di convertire quest ultimo in una lista <ul> <li>, per rendere più friendly la vendita, ad esempio nella visualizzazione di tutte le taglie:

$('select').each(function(){
    var $this = $(this), numberOfOptions = $(this).children('option').length;
    $this.addClass('select-hidden'); 
    $this.wrap('<div class="select"> </div>');
    $this.after('<div class="select-styled"> </div>');
    var $styledSelect = $this.next('div.select-styled');
    $styledSelect.text($this.children('option').eq(0).text());
    var $list = $('', {
        'class': 'select-options'
    }).insertAfter($styledSelect);
    for (var i = 0; i < numberOfOptions; i++) {
        $('', {
            text: $this.children('option').eq(i).text(),
            rel: $this.children('option').eq(i).val()
        }).appendTo($list);
    }
    var $listItems = $list.children('li');
    $styledSelect.click(function(e) {
        e.stopPropagation();
        $('div.select-styled.active').not(this).each(function(){
            $(this).removeClass('active').next('ul.select-options').hide();
        });
        $(this).toggleClass('active').next('ul.select-options').toggle();
    });
    $listItems.click(function(e) {
        e.stopPropagation();
        $styledSelect.text($(this).text()).removeClass('active');
        $this.val($(this).attr('rel'));
        $list.hide();
        //console.log($this.val());
    });
    $(document).click(function() {
        $styledSelect.removeClass('active');
        $list.hide();
    });
});
 

Disabilitare recensioni WooCommerce

woocommerce developer

WooCommerce non permette di disabilitare la tab delle recensioni

Il codice “modifica” la variabile $tabs che ci permette di disabilitare recensioni WooCommerce.

 All'interno del nostro function.php:

// Inizio codice

add_filter( 'woocommerce_product_tabs', 'sb_woo_remove_reviews_tab', 98);
function sb_woo_remove_reviews_tab($tabs) {

unset($tabs['reviews']);

return $tabs;
} 

Salva

Fork Open source CMS

Fork Open source CMS

Un piccolo CMS ma dalle grandi potenzialità

Semplice e intuitivo ancora in pieno sviluppo ma non per questo non capace di attirare attenzini!
Perfetto se dovete implementare Template originali ed esigenze di un sito dinamico che possa gestire un blog o delle sezioni news.

Non ancora molto usato ma forse è questo che lo rende molto affasciante, l'installazione e molto semplice necessita della versione minima php 5.5.0 e un db MySql.

La vera forza di Fork Open source CMS che lo rende molto interessante e la gestione delle  multiligue che potete gestire al momento dell'istallazione, ottimo per un piccolo sito internazionale anche e sopratutto dal punto di vista SEO.

Per rendere questo CMS molto interattivo visto la scarsita di estenzioni ci vuole una buona capacità nella programmazione è implementazione di eventuali plugin a mio vedere.

Fork Open source CMS: Link http://www.fork-cms.com/

Salva

Salva

Salva

Salva

Salva

Salva

Salva

Salva

Salva

Salva

WordPress 4.6 release

undefined

WordPress 4.6 le ultime novità

Processo di installazione di temi e plugin semplificato

- Ora avviene tutto su un unica pagina

Utilizzo di font disponibili

- WordPress prevede che sia usato il font default installato sul tuo sistema operativo

Controllo automatico dei link non funzionanti Broken Link Checker

- Segnalazione automatica se un link che hai inserito non è valido

Salvataggio automatico delle bozze

- WordPress 4.6 effettua salvataggi automatici dei tuoi post mentre scrivi

 

 

Molto importante prima di aggornare la vostra versione di WordPress è importante fare un backup del db

Oppure una copia dell'intero sito tramite il plugin Duplicator come potrai vedere dal sito ufficiale e dal video sotto, con molta facilità clona tutto il tuo sito Wordpress, lasciando invariate tutte le impostazioni dei widget, ciò rende molto veloce testare e verificare la nuova versione direttamente in locale.

Considerando che Wordpress e si un CMS fantastico per le sue molteplicì funzionalità e anche molto semplice che qualche plugin vada in conflitto ho peggio nostri script.

Qindi sempre meglio Test su Test in locale ;-)

htaccess vs web scanners

undefined

Sicurezza via .htaccess contro web scanner Wpscan

La sicurezza nel web non è mai abbastanza, sopratutto se abbiamo la tendenza di usare CMS gratuiti e di largo uso come Wordpress, Joomla, Drupal e altri ancora.

Prendiamo in considerazione come esempio WPScan web scanner dedicato creato per analizzare e cercare falle di sicurezza all'interno della piattaforma di blogging WordPress.

Premesso che le strade dell' hacking sono infinite nulla è veramente a prova di mal intenzionati, possiamo però provare a rendere più sicuri o almeno rendere più impegnativa l'intrusione.

Aggiungendo queste righe all'interno del nostro file .htaccess faremo in modo di dirottare una serie di web scanner w3af.sourceforge.net, dirbuster, nikto, wpscan...

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^w3af.sourceforge.net [NC,OR]
RewriteCond %{HTTP_USER_AGENT} dirbuster [NC,OR]
RewriteCond %{HTTP_USER_AGENT} nikto [NC,OR]
RewriteCond %{HTTP_USER_AGENT} wpscan [NC,OR]
RewriteCond %{HTTP_USER_AGENT} SF [OR]
RewriteCond %{HTTP_USER_AGENT} sqlmap [NC,OR]
RewriteCond %{HTTP_USER_AGENT} fimap [NC,OR]
RewriteCond %{HTTP_USER_AGENT} nessus [NC,OR]
RewriteCond %{HTTP_USER_AGENT} whatweb [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Openvas [NC,OR]
RewriteCond %{HTTP_USER_AGENT} jbrofuzz [NC,OR]
RewriteCond %{HTTP_USER_AGENT} libwhisker [NC,OR]
RewriteCond %{HTTP_USER_AGENT} webshag [NC,OR]
RewriteCond %{HTTP:Acunetix-Product} ^WVS
RewriteRule ^.* http://127.0.0.1/ [R=301,L]

attraverso un redirect a questo link http://127.0.0.1/ (a vostra scelta) ...Nella speranza che questo basti ;-)

 

Salva

Grav un CMS senza Mysql

undefined

Grav CMS semplice in apparenza ma complesso nella struttura.

GRAV è un moderno CMS (Content Management System) Open Source Flat file, un CMS che utilizza file per immagazzinare i dati e non Mysql, molto bello e ben fatto a mio parere.

Grav è un progetto open source ospitato su GitHub, originata da RocketTheme ma reso possibile da una straordinaria comunità di sviluppatori dedicati e utenti.

Molto leggero e sopratutto ricco di templates e plugin fatti molto bene, il core di GRAV è costituito da cartelle e file e sono automaticamente compilati in HTML poi vengono inseriti come cache, per la velocità e la performance di accesso alle pagine.

Occorre un plugin per visualizzare del pannello amministrativo, viene installato durante la pubblicazione del core GRAV, l’interfaccia si presenta come un pannello di gestione facile ed intuitivo.

Quindi conviene scaricare la versione con plugin incorporati, per testare e vedere la potenza e bellezza di questo CMS!

Link: downloads

 

Salva

HTML5  web Developer Andres Hunger
CSS3 web Developer Andres Hunger
javascript web Developer Andres Hunger
jQuery web Developer Andres Hunger
Bootstrap Andres Hunger Blog
WP Developer Andres Hunger