Tutti i post taggati come: ‘php’

Apr
7

PHP: Sorting a Multi-Dimensional Array

Postato in  
Technology

titolo in italiano:

Ordinamento di un array-multidimensionale in PHP

Oggi ho avuto la necessità di ordinare un array multidimensionale in PHP; un array di array in questo formato:

1
2
3
4
5
6
7
8
9
//an array of some songs I like
$songs =  array(
'1' => array('artist'=>'The Smashing Pumpkins', 
'songname'=>'Soma'),
'2' => array('artist'=>'The Decemberists', 
'songname'=>'The Island'),
'3' => array('artist'=>'Fleetwood Mac', 
'songname' =>'Second-hand News')
);

Sempre per il principio di non re-inventare la ruota, googlando un pò è saltata fuori questa funzione su firsttube:

Tuttavia a me serviva qualcosa di un pò più evoluto, che mi consentisse non solo di scegliere la chiave dell’array sulla quale ordinare, ma anche il verso dell’ordinamento.

1
2
3
4
5
6
7
8
9
10
11
12
13
function subval_sort($a,$subkey) 
 {
  foreach($a as $k=>$v) {
    $b[$k] = strtolower($v[$subkey]);
  }
  asort($b);
 
  foreach($b as $key=>$val) 
  {
    $c[] = $a[$key];
  }
  return $c;
}

Di seguito la mia estensione:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function subval_sort($a,$subkey,$sortOrder) 
 {
  foreach($a as $k=>$v) {
    $b[$k] = strtolower($v[$subkey]);
  }
  if($sortOrder == "asc")
    asort($b);
  else if($sortOrder == "desc")
    arsort($b);
  foreach($b as $key=>$val) 
  {
    $c[] = $a[$key];
  }
  return $c;
}

Related Posts:

Mar
22

Magento 1.5.0.1 install on Windows 7 x64, Mysql 5, Php 5.3.5

Postato in  
Technology

In vista di un progetto che mi impegnerà nei prossimi mesi, oggi ho installato Magento 1.5.0.1 sulla mia macchina di sviluppo: Windows 7 x64, Php 5.3.5 e Mysql 5.

Durante la fase di installazione ho avuto a che fare con 4 problemi bloccanti:

1. errore durante la validazione di Base URL.

Durante la fase di installazione, magento chiede l’url presso quale installare il prodotto. Essendo in ambiente di sviluppo, avevo necessità di inserire qualcosa come:

1
http://localhost/magento

Purtroppo l’applicativo continuava a fornire errore. Per bypassare il problema, si deve editare il file: \app\design\install\default\default\template\install\config.phtml.

Cercate il pezzo codice seguente:

1
2
3
4
5
6
7
8
9
10
<label for="base_url">
<?php echo $this->__('Base URL') ?> <span class="required">
*
</span></label>
<br />
<input type="text" name="config[unsecure_base_url]" id="base_url" 
value="<?php echo $this->getFormData()->getUnsecureBaseUrl() ?>" 
title="<?php echo $this->__('Base URL') ?>" 
class="required-entry validate-url input-text" />
</li>

Per risolvere il problema, bisogna eliminare l’attributo “validate-url” dal campo class di input text.

2. Il secondo problema con cui ho avuto a che fare è stato in fase di creazione delle tabelle su db mysql. Il sistema restituiva sempre il seguente errore:

1
2
Fatal error: Maximum execution time of 60 seconds exceeded in
C:\path\to\magento\lib\Varien\Db\Adapter\Pdo\Mysql.php on line 276

Per risolvere, è sufficiente aumentare il tempo di timeout configurabile dal driver mysql dentro php.ini.

3. Il terzo problema è pazzesco. L’ultimo step del wizard di installazione di magento, richiede la creazione di un account di amministrazione dello store.
Succede che non funzioni correttamente la validazione della password, per risolvere è stato sufficiente refreshare la pagina con f5 e reinserire la [stessa] password.

4. Una volta installato Magento, mi è capitato il problema più disarmante: non poter accedere al pannello di amministrazione, pur avendo inserito correttamente username e password (create al punto 3 precedente).

Per bypassare questo problema si deve modificare il file

\app\code\core\Mage\Core\Model\Session\Abstract\Varien.php.

Alla linea 75, il codice deve essere così scritto:

1
2
3
4
5
6
7
session_set_cookie_params(
$this->getCookie()->getLifetime(),
$this->getCookie()->getPath()
/* $this->getCookie()->getDomain(),
$this->getCookie()->isSecure(),
$this->getCookie()->getHttponly() */
);

Ne approfitto per un paio di impressioni.
L’installazione e l’utilizzo di OsCommerce resta, a mio parere, nettamente più semplice ed usabile di quanto non sia Magento. Tuttavia, anche a colpo d’occhio, semplicemente osservando il backend, si capisce quanto sia complesso e potente il controllo offerto da Magento sul proprio store.

Related Posts:

Apr
26

PHP 5.2 Indirect modification of overloaded property

Postato in  
Technology

Nota: questo è un post tecnico!!

Nel tentativo di ottimizzare il numero di query per un nuovo progetto partito da poco, ho deciso di parametrizzare la clausola where di una query, valorizzando la corrispondente “in” tramite un array passato quale parametro di un generico metodo.

Come sappiamo, dall’introduzione di PHP 5.x sono stati introdotti i metodi __get e __set di modo da poter, rispettivamente, leggere o scrivere il valore di una proprietà definita all’interno di un oggetto.
Tuttavia, ciò che forse non sappiamo, è che dalla versione 5.2 il metodo __get restituisce copie, e non riferimenti. Per questo motivo, non sarebbe possibile scrivere una cosa del tipo:

$obj = new MyObject;
$obj->property1['param1'] = true;

Il sistema tornerà il seguente errore:

Notice: Indirect modification of overloaded property MyObject::$property1 has no effect.”

Per risolvere questo bug, è sufficiente modificare il metodo __get di modo che restituisca un riferimento.

public function &__get($key)
{


}

(via bugs.php.net)

Related Posts:

Jan
22

WordPress 2.1

Postato in  
Technology

Si vocifera da un paio di giorni che domani verrà rilasciata la nuova versione di WordPress (prima major release dopo la 2.0). Personalmente non effettuerò l’upgrade immediatamente per tutta una serie di ragioni, non ultima il non avere la compatibilità con i plugin in uso su questa piattaforma e la scarsa affidabilità iniziale, soprattutto a livello di sicurezza, delle prime release di nuovi branch di qualsivoglia applicazione.

Girogavando per la rete ho poi trovato questo interessante articolo, dove vengono elencati dieci differenti punti da tenere in considerazione per un eventuale aggiornamento alla 2.1:

  1. E’ stata aggiunta una nuova funzionalità di auto-save dei draft scritti: sfrutta AJAX e prevede come vincolo l’aver inserito il titolo del post;
  2. E’ stata migliorata la sezione per l’upload delle immagini;
  3. Sono state apportate tutta una serie di modifiche alla gestione del database. Nello specifico sono state modificate alcune tabelle del db su cui si appoggia wordpress ed è stato aggiornato il metodo per interrogare il database:
    • $tableposts è diventata $wpdb->posts
    • $tablecomments è diventata $wpdb->comments
  4. Per quanto detto al punto precedente, non tutti i plugin funzionanti per la versione 2.0 è garantito funzioneranno anche nella 2.1. E’ possibile trovare qui una lista di compatibilità;
  5. E’ stata introdotta la funzionalità di migrazione del blog verso altri blog o altre piattaforme. Potete leggere qui maggiori informazioni a riguardo;
  6. E’ stato eliminato il supporto a versioni di MySql antecedenti la 4.0;
  7. E’ stata aggiunta una nuova interfaccia grafica per la scrittura dei post;
  8. E’ stato effettuato un merge, a livello di database, del concetto di link e categoria;
  9. Nella versione 2.1 si dà la possibilità di decidere il livello di privacy del proprio blog tramite degli appositi filtri che consentiranno di bloccare i motori di ricerca o qualsivoglia altro tipo di directory;
  10. E’ stato ripreso l’utilizzo, introdotto nella 2.0.3, dei nonces: sono delle password inserite nelle email di moderazione dei commenti che permettono ad una specifica persona, e solo a quella, di effettuare quella specifica operazione in wp-admin

Credo che ci siano dei buoni motivi per installare la nuova versione (ad esempio la nuova interfaccia grafica, e sicuramente qualche altra piccola opzione corretta qui e lì). Ma, credo anche alla luce degli ultimi avvenimenti (leggi rilascio a distanza di pochi giorni della 2.0.6 e della 2.0.7), che ci siano ottimi motivi per non effettuare l’upgrade: su tutti, l’aver tolto il supporto a versioni di MySql antecedenti la 4.0 e il non aver a tuttoggi il completo supporto su tutti i plugin.

(via technorail)

Related Posts: