Posts Tagged "Php"

Magento: convert all wrong product links in their canonical equivalent.

Sometimes in magento product links are listed in the following mode:
catalog/product/view/id/3/s/product-name/category/3/
which can be very inconvenient from the SEO point of view. To solve this issue you can force a canonical form of product url in following mode:

In theme/template/catalog/product/list replace all instances of

$_product->getProductUrl()

with

Mage::getUrl($_product->getUrlKey())

Come risolvere warning apc.shm_size now uses M/G suffixes

Se avete il suddetto errore, da qualche parte (probabilmente in “/etc/php5/conf.d/apc.ini” se avete distribuzione debian) la seguente riga:

apc.shm_size=256

Per risolvere basta cambiarla in seguente modo:

apc.shm_size=256M

Invocare il debug verso PhpEd da uno script php cli

All’interno dello script aggiungere

debugbreak('[email protected]');

Dove 192.168.0.17 è indirizzo ip su cui è in essecuzione phped (localhost nel caso in cui fate il tunneling con putty)

Disabilitare Zend Layout ed il rendering di Zend View in tutto controller

class CronController extends Zend_Controller_Action
{
    public function preDispatch()
    {
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
    }
}

Utilizzare smtp di Gmail con Zend_Mail

Ultimamente sto sviluppando sempre più spesso in locale sul mio netbook il che ha comportato la scelta di wamp come piattaforma di sviluppo.

La configurazione attuale mi permette di far fronte a tutte le mie necessità (phpunit, xdebug, php debug di phped, etc), ad eccezione di un piccolo particolare: email. Siccome non ho nessuna voglia di installare un server di posta elettronica in locale (e a dir verò non ne vedo alcuna necessità) ho dovuto trovare il modo di configurare la mia applicazione zend in modo da poter usare smtp del mio account su google.

Ecco come si può procedere:

Continua…

Alcune note sul bootstrapping dei moduli sotto ZF

Appunti presi dopo la lettura di questo post

In particolare: se ci sono delle funzionalità che devono essere chiamate solo a condizione che il modulo partecipa attivamente nella richiesta, allora conviene metterli all’interno dei plugin di front controller oppure dentro gli action helper.

Se si sceglie la prima strada, un posto buono potrebbe essere rappresentato dai hook routeShutdown() oppure dispatchLoopStartup(). Basta semplicemente verificare che il modulo dentro la richiesta corrisponde a quello su cui deve essere esguita l’azione richiesta.

class Foomodule_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        if ('foomodule' != $request->getModuleName()) {
            // If not in this module, return early
            return;
        }

        // Change layout
        Zend_Layout::getMvcInstance()->setLayout('foomodule');
    }
}
class Foomodule_Boootstrap extends Zend_Application_Module_Bootstrap
{
    protected function _initPlugins()
    {
        $bootstrap = $this->getApplication();
        $bootstrap->bootstrap('frontcontroller');
        $front = $bootstrap->getResource('frontcontroller');

        $front->registerPlugin(new Foomodule_Plugin_Layout());
    }
}

Installare PHPUnit sotto WampServer

Una breve guida per installazione di PHPUnit e WampServer.
1) Installate WampServer Al momento attuale ultima versione è 2.0i
2) Entrate in Console (con privilegi di amministratori se siete sotto vista/7) e digitate

cd C:\wamp\bin\php\php5.3.0
go-pear.bat
PEAR upgrade PEAR

Se vi viene restituito un errore di “signature” allora eseguite

php.exe -d phar.require_hash=0 PEAR/go-pear.phar
PEAR upgrade PEAR

Potete usare le impostazioni di default. In questo modo installate ed aggiornate Pear (senza aggiornamento, installazione di phpunit non va a buon fine)
Continua…

Modificare la route predefinita in Zend Framework 1.9x

Il problema: di base su zend abbiamo il percorso del tipo sito/controller/azione/param1/param2… a me invece serviva una cosa del tipo sito/controller/param (per esempio sito.com/libri/titololibro).

La documentazione standard di zend è alquanto generica tanto per cambiare ma alla fine credo di aver trovato la soluzione più o meno giusta/accettabile

Assumendo che il vs. progetto è stato creato con Zend Tool, modificate il file “BootStrap.php” aggiungendo questo codice

protected function _initControllers(){
        $router = Zend_Controller_Front::getInstance()->getRouter();
        $route = new Zend_Controller_Router_Route(
            'circolari/:titoloCircolare',
            array(
                'controller' => 'circolari',
                'action'     => 'view'
            )
        );

        $router->addRoute('circolare', $route);
    }

dove titoloCircolare è il nome della variabile GET in cui verrà memorizzato il titolo.

Debug di zend_db_table_select

Per trovare la query grezza (quella che viene eseguita sul db) si può procedere come segue:

          $select = $this->select()->limit(15)->order("id desc");

          $queryGrezza = $select->__toString();

          $rows = $this->fetchAll($select);
          return $rows->toArray();

Dreamweaver e Heredoc

Ho notato che DreamWeaver non digerisce bene il heredoc, a volte scazzando il parsing del file php (che non veniva modificato all’aggiornamento del template). Sul sito di php.net ho trovato seguente fix:

When editing with Dreamweaver, the syntax higlighting will be messed up if you use heredoc syntax. I found that the color syntaxing can be taken care by editing the php syntax file for DW.

Open Macromedia\Dreamweaver 8\Configuration\CodeColoring\PHP.xml and look for:


]]>

Directly after that add:


Now, DW will treat <<) and EOF; as it was the start (