jQuery Once: Drupal 8 vs Drupal 7

Chi ha avuto modo di cimentarsi nella stesura di qualche riga di codice JS in Drupal 8 si sarà sicuramente imbattuto in un problema, quello di jQuery once che non funziona a dovere, o almeno così pare.

Cosa è successo?

In primis c’è da capire qual è la versione di jQuery utilizzata.

Drupal 7

In tal senso con il modulo contrib jQuery update di Drupal 7 era possibile passare dalla versione 1.4 di jQuery ad una versione superiore a scelta (oggi arrivata alla 1.10) e che il modulo non è più disponibile in Drupal 8.

In Drupal 7 avremmo fatto una cosa del genere:

Drupal 8

In Drupal 8 la versione di jQuery è la 3.2.1 (questo al 24/07/2018 quando è appena uscita l’alpha di Drupal 8.6.0-alpha1; vedi immagine).

Quindi molto più avanzata rispetto a quella di Drupal 7.

Questo ha fatto sì che il modo di invocare determinate funzioni (come il once) sia cambiato.

Come rilevato nel ticket aperto dalla community di Drupal c’è un problema di funzionamento con jQuery once che deve essere invocato in un altro modo, dopo che esso è stato aggiornato alla versione 2.0.

Ebbene tutto ciò è stato realizzato discusso, analizzato e risolto in un ticket sulla community, questo: https://www.drupal.org/node/2457769.

Per comodità riporto di seguito l’esempio ivi riportato:

Come è possibile vedere adesso il once si ottiene in maniera sequenziale, senza gli innesti che erano necessari qualche versione fa.

Drupal 7 campi condizionali nei form con gli states

Oggi voglio presentarvi gli states degli elementi di un form Drupal.

Il problema

Vogliamo per un motivo o per un altro nascondere selettivamente dei campi in determinate condizioni, senza scrivere dei JS da aggiungere al form, massimizzando la manutenibilità del codice.

Tutto questo è consentito dagli states degli elementi del form di Drupal che consentono di inserire una logica con stati e condizioni in grado ad esempio di nascondere un campo se una checkbox è flaggata oppure mostrare un campo e renderlo obbligatorio.

Esempio:

Poniamoci nel caso in cui abbiamo un modulo di inserimento (un form insomma) di richieste di supporto in cui abbiamo un campo di tipo select chiamato “Oggetto” con varie opzioni selezionabili. Una di queste opzioni è “Altro”, se “Altro” è selezionato allora bisogna mostrare un campo (normalmente nascosto) chiamato “oggetto altro”.

Un codice di questo tipo risolve assolve al compito:

Interessante analizzare la funzione drupal_process_states poiché essa mostra tutti gli stati e le condizioni possibili, che per comodità riporto qui sotto:

I possibili stati di un elemento (del form) sono:

  • enabled
  • disabled
  • required
  • optional
  • visible
  • invisible
  • checked
  • unchecked
  • expanded
  • collapsed

Le possibili condizioni (che su drupal.org chiama remote conditions) sono:

  • empty
  • filled
  • checked
  • unchecked
  • expanded
  • collapsed
  • value

Gli stati che seguono possono essere utilizzati sia come stati di un elemento (primo gruppo) sia come condizioni remote (secondo gruppo):

  • relevant
  • irrelevant
  • valid
  • invalid
  • touched
  • untouched
  • readwrite
  • readonly

Tuttavia il funzionamento di quest’ultimo gruppo di stati non è garantito in ogni scenario, poiché le funzionalità che ne derivano sono molto dipendenti dal browser dal quale vengono eseguite.

Dalla versione 7.14 di Drupal è anche possibile usare OR e XOR.

Spero di essere stato utile.

NOTA: Un discorso del tutto analogo può essere fatto per Drupal 8 che, sebbene abbia stravolto la maggior parte delle funzionalità di Drupal 7, implementa questa degli states degli elementi del form in maniera similare.

Drupal 8 creare link html da file id (fid)

Per i nostalgici di Drupal 7 che hanno provato disperatamente a districarsi tra le varie classi introdotte in Drupal 8, ebbene sappiate che:

  1. per quello che può servire, godete della mia solidarietà
  2. dopo varie peripezie sono riuscito ad ottenere un codice utile a generare il famigerato html

Ecco il codice di esempio testato su Drupal 8.5.x

spero che questo codice vi sia di aiuto.

Fatemi sapere, nei commenti, se questa cosa vi risolve il problema.

Email security check. Email violata? Controlla e provvedi subito!

Vi ricordate quando abbiamo parlato di come creare una password che vi garantisca un buon livello di sicurezza?
Ecco il link all’articolo http://www.unmoscerinonelweb.com/blog/password-sicura-sei-sicuro/ nel caso ve lo foste perso.

Rimane sempre una buona idea avere una password diversa per ogni account, perché? Semplice se qualche cracker (un hacker con cattive intenzioni) riuscisse a violare un sito dove siete registrati ed ottenere la vostra password allora avrebbe le porte della vostra privacy e della vostra sicurezza spalancate, con tanto di tappeto rosso.

Su questo sito potete scoprire se il vostro account email risulta essere stato violato assieme agli altri presenti su un sito dove siete registrati e quali sono i dati in pericolo.

Visitate haveibeenpwned.com scrivete il vostro indirizzo email e incrociate le dita.

Se ci sono problemi di sicurezza vi sarà mostrato un report di questo tipo:

Andate portale per portale e cambiate la password, inserendone una diversa per ogni sito/portale.

Buona fortuna.

PSSSS

Volete un modo per conservare le password indipendente e offline? Date un’occhiata a keepass.info.

File managed entire folder Drupal

Some information on managed and unmanaged files in Drupal

If a file is on a certain folder of the webserver within the Drupal folders it does not mean that Drupal knows it!

When Drupal “store” the presence of a certain file (i.e. public://myfile.pdf) it became a managed file.

You can add a file to managed with file_save_data function.

Luckly or unfortunaly a function that manage an entire directory of files, maybe in a recursive way, is not present in Drupal core.

How to import a folder of files to Drupal?

I create a script to this in a clean and easy way.

Note that dpm function is provided with a contrib module: Devel.

Hint

I have used this functionality to put lots of images in the media library (made with Media module) and make them available for redactors.

Drupal 7 blocks external frame due to X-Frame-Options

As documented (https://www.drupal.org/node/2735873) Drupal comunity removed the possibility to embedd a Drupal site into an external frame to avoid clickjacking.

The problem

Basically you can not put an external Drupal website into an iFrame anymore, if you try to embedd a website with X-Frame-Options restrictions you will get a browser console error stating something like this

because it set ‘X-Frame-Options’ to ‘sameorigin’

This behavior is obtained in drupal_deliver_html_page (in common.inc) in which it is checked what I show you below:

To see your Drupal website displayed into a frame of an external website you must change X-Frame-Options (or remove it).

The solution

Although Drupal documentation (https://www.drupal.org/node/2735873) explains that you can remove the X-Frame-Options header via the page_alter, I discovered that under certain conditions this strategy does not work at all.

In my case I was able to surf the site from a Frame only if I was logged in with an active session.

To achieve a better solution, my suggestion is to modify the Drupal variable x_frame_options before the drupal_deliver_html_page is called.
I did this (and it works like charme) via page_delivery_callback_alter, where I set the variable to FALSE under certain satisfited conditions (i.e. the page is requested from a whitelist domain).

Hope this help.

Requisiti pubblicazione app su Android store

Di seguito una raccolta delle immagini e info necessarie a sottoporre un’app Android nell’Android store.

Occorrono i seguenti testi

  1. Titolo (max 30 caratteri)
  2. Descrizione breve (max 80 caratteri)
  3. Descrizione completa (max 4000 caratteri)

Occorrono le seguenti immagini tenendo conto delle indicazioni di Google a riguardo, che riporto di seguito:

Predefinita: Italiano – it-IT
JPEG o PNG a 24 bit (non alfa). Lunghezza minima di qualsiasi lato: 320 px. Lunghezza massima di qualsiasi lato: 3840 px.
Sono richiesti almeno 2 screenshot totali. Massimo 8 screenshot per tipo. Trascina per riordinare o per cambiare tipo.

Tenuta presente questa condizione, bisogna produrre:

  1. Icona ad alta risoluzione
    Predefinita: Italiano – it-IT
    512 x 512
    PNG a 32 bit (con alfa)
  2. Banner in primo piano
    Predefinita: Italiano – it-IT
    1024 l x 500 a
    JPG o PNG a 24 bit (non alfa)
  3. Immagine promozionale
    Predefinita: Italiano – it-IT
    180 l x 120 a
    JPG o PNG a 24 bit (non alfa)
  4. Banner TV
    Predefinita: Italiano – it-IT
    1280 l x 720 a
    JPG o PNG a 24 bit (non alfa)

Semmai non lo sapessi con alfa si intende la trasparenza.

Inoltre sono da fornire queste ulteriori informazioni, alcune delle quali obbligatorie:

  • Video promozionale
    Predefinita: Italiano – it-IT
    Video di YouTube
    Inserisci un URL
  • Tipo di applicazione (a scelta tra “applicazione” e “gioco”)
  • Categoria (a scelta in una lista)
  • Sito web
  • Email
  • Telefono
  • Link alla pagina relativa alla privacy

 

Terrò aggiornato il post con le novità.

Esempio di file config.rb per sass scss

Un appunto per conservare il file config.rb, che dà istruzioni al preprocessore Sass di come compilare il css.

Per maggiori informazioni su come funziona, casomai non fossero chiari i commenti in lingua inglese (le righe che cominciano con ‘#’ sono identificate come commenti dal compilatore che le ignora) presenti nel file, sono reperibili facilmente online. La documentazione ufficiale è un valido punto di inizio.

List directories with php and compare them

Sometimes it’s important to quickly highlight differences between two folders structure.

It could happen expecially when you are obliged to work on cheap environments, without console and you need to understand if there are differences among your local filesystem and the remote one.

You can copy the script in each directory and naming it scandir.php, than reach it by browser at the url http://path-to-your-base-folder/scandir.php.

In this way you have just executed the script, do it on each environment directory and occasionally compare them.

To compare there are Notepad++, git diff, WinMerge and plenty of open source tools.

Scandir is a php function, check it, I have wrote this code using an example I found there.