DRUSH: tutorial installazione su MAC OS X

Drush è un'interfaccia shell che consente di effettuare da riga comando delle operazioni amministrative sui nostri portali Drupal come svuotare la cache, installare moduli, effettuare backup, etc. Approfondiremo meglio questo interessante strumento, drush, in un articolo futuro, in questo articolo descriveremo la procedura di installazione su un ambiente MAC che utilizza MAMP (o MAMP PRO). Innanzitutto bisogna scaricare il pacchetto dal github ufficiale, cliccando "Download ZIP" da questo link: https://github.com/drush-ops/drush Apriamo il Terminale e verifichiamo che esista la cartella /usr/local/lib, se non esiste creiamola con sudo mkdir /usr/local/lib e posizioniamoci dentro. Scompattiamo e spostiamo il pacchetto drush appena scaricato mv ~/Downloads/drush-master/ . Rinominiamo la cartella mv drush-master/ drush Diamo i permessi di esecuzione all'eseguibile sudo chmod u+x /usr/local/lib/drush/drush Installiamo composer:
curl -sS https://getcomposer.org/installer | php
 
php composer.phar
 
sudo php composer.phar install
E creiamo un link simbolico per poter accedere al comando da qualsiasi directory:
sudo ln -s /usr/local/lib/drush/drush /usr/bin/drush
Infine creiamo un link a mysql.sock dove si aspetta di trovarla drush:
sudo mkdir /var/mysql
 
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
Fatto! Per verificare che tutto sia andato bene posizionatevi sulla document root di un vostro sito ed eseguite il comando:
drush status
Alla prossima!

Ridimensionamento immagini in Drupal 7

In Drupal 7 è possibile creare dei preset per le immagini che vengono messi in cache e ne rendono efficiente e comodo l'utilizzo. Per definirli, tipicamente nell'hook_install, procedere come segue:
function miomodulo_install() {
  $style = image_style_save(array('name' => 'scala80x80'));
  $effect = array(
    'name' => 'image_scale',
    'data' => array(
      'width' => 80,
      'height' => 80,
      'upscale' => FALSE,
    ),
    'isid' => $style['isid'],
  );
  image_effect_save($effect);
}
Per utilizzarlo, ad esempio all'interno di un tag img, è sufficiente questo codice (in questo esempio si renderizza l'immagine dell'avatar del'utente):
<img src="<?php print image_style_url('scala80x80', $user->picture->uri); ?>">
Per pulizia, si consiglia di mettere nell'hook_uninstall la rimozione dello stesso, come segue:
function miomodulo_uninstall() {
  image_style_delete(image_style_load('scala80x80'));
}

Auto submit di una form in PHP

A volte in PHP è necessario mandare in post dei dati di una form in modo automatico.
Questa cosa si può fare in diversi modi, un modo rapido è stampare una pagina html che sfrutta l'evento onLoad del body.
<?php
  $action = "http://www.miosito.it/post.php"; // la url a cui mandare i dati in POST
  $username = $_POST['username'];
  $password = $_POST['password'];
 
  print <<<AUTO_LOGIN
<html>
<head>
</head>
<body onLoad='document.miaform.submit();'>
  <div style="display: none;">
  	<form id="miaform" name="formprm" action="{$action}" method="POST">
        <input type="hidden" name="username" value="{$username}">
        <input type="hidden" name="password" value="{$password}">
        <input type="submit" value="submit">
  	</form>
  </div>
  </body>
</html>
AUTO_LOGIN;
  exit();
?>
Mi raccomando, non date al tasto submit il "name=submit" altrimenti la chiamata document.miaform.submit restituirà l'errore "submit is not a function".

Creare un utenza Drupal da codice

A volte è necessario creare un utente direttamente da codice ed autenticarsi automaticamente.
Ancora una volta ci viene in aiuto il framework di Drupal con le sue API.
// controlla che siano stati passati i dati in POST e che la username sia univoca
if (isset($_POST['username']) && isset($_POST['password'])) {
  if (!user_load_by_mail($_POST['username'])) {
   $account = new stdClass;
   $account->name = $_POST['username'];
   $account->pass = $_POST['password'];
   $account->mail = $_POST['username']; // in questo esempio la mail coincide con la username
   $account->status = TRUE;
   $account->language = "it";
   $account->init = $_POST['username'];
   $account->roles = array(
       DRUPAL_AUTHENTICATED_RID => TRUE,
      // Eventuale ruolo personalizzato' => TRUE,
    );
    // esempio di popolamento campo custom
    $account->field_tipologia["it"][0]['value'] = "TipoA";
    user_save($account);
   }
   user_authenticate($_POST['username'], $_POST['password']);
 }

Gestire risoluzione iPhone5 usando due xib con un unico ViewController

In questo articolo spiegherò passo-passo come poter utilizzare uno xib differente se l'app viene utilizzata da un iPhone 5, utilizzando lo stesso ViewController su più xib.

1) Creare un secondo xib (File -> New -> selezionare "User Interface" -> "Empty" e salvare).
In questo modo si crea un nuovo xib vuoto, nel mio caso lo xib per iPhone da 3.5" si chiamava RadioViewController.xib, ho salvato il nuovo xib per iPhone 5 col nome "RadioViewController5.xib".

2) Far puntare il "File's Owner" allo stesso ViewController del vecchio xib. Per farlo, selezionare il nuovo file xib, selezionare "File's Owners" e modificare in "Identity Inspector" selezionando la View Controller come classe custom. Nel mio caso ho selezionato "RadioViewController".

3) Creare una UIView dentro il nuovo xib vuoto. Selezionare come attributo 'Size' = "Retina 4 Full Screen".

4) Ricreare tutti i controlli, pulsanti, selettori, etichette, etc. dentro il nuovo xib per iPhone 5. Ridimensionarli e riposizionarli per ottimizzarli nel nuovo display 4".

5) Effettuare tutte le connessioni da/verso il File's Owner così come era stato fatto per il vecchio xib.

Finalmente, aggiungete / estendete il seguente metodo nel vostro ViewController (ovviamente adattando i nomi al vostro caso).
- (void)loadView {
    [super viewDidLoad];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        if (result.height == 568) {
            // iPhone 5
            [[NSBundle mainBundle] loadNibNamed:@"RadioViewController5" owner:self options:nil];
        } else {
            // iPhone classico
            [[NSBundle mainBundle] loadNibNamed:@"RadioViewController" owner:self options:nil];
        }
    }
}
Fatto!

Come cambiare il tema di Drupal 7 in base all'url

Per cambiare il tema in funzione dell'url abbiamo diverse possibilità. La più conveniente è quella di utilizzare l'hook "custom_theme", come nell'esempio seguente:
function mymodule_custom_theme() {
  if (arg(0) == 'bacheca') {
    return 'tema_bacheca';
  }
}
In questo esempio tutte le url la cui radice è /bacheca (quindi anche l'eventuale /bacheca/xxx) vengono renderizzate utilizzando il tema "tema_bacheca".
Sostituire "mymodule" col nome del vostro modulo, "bacheca" con la radice che si vuole visualizzare col tema personalizzato e "tema_bacheca" con il nome del tema da utilizzare per tali url.
Subscribe to Blog tecnico RSS