Configurando as páginas de erro do magento

Na instalação padrão, quando ocorre algum erro no Magento, ele mostra ao usuário uma tela baseada no layout padrão mostrando o código do Error Log. Isso é extremamente desagradável ao usuário por não entender o que aquilo significa.

Para personalizar as suas páginas de erro e ainda exibir um formulário de contato com o cliente que chegou na página de erro, procure na sua instalação a pasta errors/default/ e copie com o nome do seu template, ou seja error/meutemplate/

Renomeie o arquivo local.xml.sample que está dentro da pasta error/ para local.xml e abra para edição.

Altere os valores das tags de acordo com o desejado

  • <skin> - nome do template ao qual pertence a página de erro, ex.: meutemplate;
  • <action> - gerencia qual ação será tomada
    • print: para colocar o erro na tela. Ideal para usar no seu servidor de testes.
    • email: para enviar o erro por email.
  • <subject> - assunto do email
  • <email_address> - para qual email deverá ser enviado o erro.
  • <trash> - gerencia o que fazer com o erro.
    • leave: para gravar o erro no banco
    • delete: para limpar

Personalize os arquivos que copiou da pasta default, sendo os arquivos:

  • page.phtml: para emoldurar a página com o seu template
  • 404.phtml: para configurar a página com o erro de página não encontrada.
  • 503.phtml: para configurar a página com o erro de serviço indisponível.
  • report.phtml: para configurar a página que te enviará o relatório de erros por email.

Tente usar o mínimo de requisições ao core do Magento, pois se o erro ocorrer devido a falhas no core, o usuário não visualizará a página de erro.

Criação de Blocos de página no Magento

Um dos grandes problemas ao se trabalhar com o magento é a sua parte burocrática para a implementação de códigos. Para mudar simplesmente um menu de posição, será necessário um esforço muito maior do que temos hoje para executar o mesmo processo em um sistema Joomla ou WordPress.

Se por um lado é um sacrifício ter que passar por estas etapas, por outro, de acordo com a Varien, isso dá mais segurança.

Então para implementarmos um bloco de código, não é somente inserir um include, require ou implantar o código diretamente no template. Para exemplificar, farei a descrição das etapas para chamar um bloco de código que faça a exibição do menu principal da página. Proceda então da seguinte forma:

Crie o seu arquivo phtml dentro do caminho app/design/frontend/default/seu_tema/template/page/html/, neste caso nomeei como menuprincipal.phtml.

Abra o arquivo page.xml que está dentro de app/design/frontend/default/seu_tema/layout/

Como eu quero que o menu apareça dentro do bloco header, insiro a linha a seguir dentro do trecho de código xml que gerencia este bloco.

<block type="page/html_header" name="header" as="header">
    <block
     type="core/template"
     name="menuprincipal"
     as="menuprincipal"
     template="page/html/menuprincipal.phtml" />
</block>

Então temos quatro variáveis a serem preenchidas para a exibição correta do nosso bloco: type, name, as e template.

  • type identifica o tipo do bloco, você verá outros tipos na própria página page.xml
  • name é o nome do seu bloco;
  • as é o atalho que você usará para chamar este bloco e
  • template é o caminho para se chegar até o seu arquivo phtml.

Para finalizar, vá até o seu template do header que fica em app/design/frontend/default/seu_tema/template/page/html/ e insira o código que fará a chamada do seu bloco.

<?php echo $this->getChildHtml('menuprincipal') ?>

Você pode usar estes blocos para subdividir e gerenciar melhor o seu layout.

Referências

http://inchoo.net/ecommerce/magento/custom-reference-structural-block/

http://www.exploremagento.com/magento/simple-custom-module.php

Adicionando MySQL do MAMP ou XAMPP via linha de comando no Terminal do Mac

Apesar de termos o PHPMyAdmin como excelente ferramenta de gerenciamento do MySQL, existem algumas facilidades quando trabalhamos com o MySQL via linha de comando.

Por exemplo, para fazer ou restaurar backup de uma base de dados é muito mais rápido via linha de comando do que exportando o arquivo pelo PHPMyAdmin e reimportando pelo mesmo. Sem contar que dependendo do tamanho do arquivo podem ocorrer erros na importação e corromper os dados.

Para este tipo específico de problema, resolvi então buscar uma forma mais prática para usar o MySQL instalado pelo MAMP (ou XAMPP) na linha de comando do terminal.

Os resultados que mostro abaixo foram baseados no artigo “Command line MySQL not working with XAMPP” do site http://www.aschroder.com/2009/03/how-to-use-the-mamp-mysql-command-line-client-in-a-terminal/.

Abra o terminal, crie um diretório na raiz chamado bin e acesse.

mkdir ~/bin
cd ~/bin

Crie um atalho para a aplicação

ln -s /Applications/MAMP/Library/bin/mysql mysql

Para usar o XAMPP no lugar do MAMP é só substituir o atalho da aplicação pelo endereço do XAMPP no seu sistema. Abra o arquivo ~/.bash_profile, pode ser usando o comando PICO e VI do terminal ou como eu prefiro, usando o aplicativo TextWrangler. Se houver alguma linha escrita neste arquivo, adicione na linha seguinte:

export PATH=$PATH:/Users/__usuario__/bin/

Caso contrário digite:

export PATH=/Users/__usuario__/bin/:$PATH

Lembrando de trocar o termo __usuario__ pelo seu nome de usuario do sistema. Salve o arquivo, volte ao terminal e teste digitando:

echo $PATH

Verifique o atalho com:

ls -la ~/bin

E verifique qual endereço do MySQL está rodando no seu sistema com:

which mysql

Pronto, a partir de agora para acessar o mysql é só digitar no terminal:

mysql

E o prompt de comando já será alterado para responder ao MySQL.

Atualizar WordPress via SSH

Em algumas hospedagens eu encontrei um problema persistente que faz com que mesmo a pasta tendo chmod 777, o servidor bloqueia a atualização automática do wordpress, ou até mesmo por falta de memória disponível nas hospedagens compartilhadas quando aparece o erro de Timeout.

Procurando uma forma de fazer as atualizações de forma rápida e segura, me deparei com a possibilidade de fazer via SSH. Existem alguns posts falando a respeito, entretanto não encontrei nenhum que falasse como fazer o processo para WordPress versão pt-br.

O processo é bem simples. Acesse o seu servidor via SSH, e insira os comandos abaixo:

wget http://br.wordpress.org/wordpress-3.1.1-pt_BR.tar.gz

Acessando o http://br.wordpress.org você pode pegar o link da versão tar.gz mais atual caso esta não seja.

Descompacte o arquivo.

tar xfz wordpress-3.1.1-pt_BR.tar.gz

Delete as pastas wp-include e wp-admin da sua instalação atual ou simplesmente renomeie caso queira ter como backup.

rm -rf ./wp-includes/
rm -rf ./wp-admin/

Acesse a pasta que você acabou de descompactar

cd wordpress

E copie sobrepondo os arquivos com o seguinte comando:

cp -rpf -f * ../

Volte para a sua instalação WordPress

cd ..

Delete os arquivos que você não usará mais.

rm -rf wordpress
rm -f wordpress-3.1.1-pt_BR.tar.gz

Acesse o admin do seu WordPress e atualize a sua rede.

Como fazer backup da base de dados MySQL via SSH

Faça o acesso ao seu servidor conforme descrito no Acessando o servidor via SSH.

Digite o seguinte comando no Terminal:

mysqldump -h endereco_host -u login -p -R --opt nome_banco_dados > arquivo.sql

Caso opte por fazer o backup apenas de uma tabela coloque o nome da tabela logo após nome_bd

mysqldump -h endereco_host -u login -p -R --opt nome_banco_dados nome_tabela> arquivo.sql

Se houver problemas de acentuação acrescente este parâmetro logo após –opt

mysqldump -h endereco_host -u login -p -R --opt --default-character-set=latin1  nome_banco_dados > arquivo.sql

Acessando servidor via SSH

O FTP é uma ferramenta muito útil para o tráfego de arquivos, entretanto dependendo da quantidade que se tenha para transferir, o processo fica muito lento devido a verificação de cada arquivo enviado.

Para estes casos, é possível compactar o arquivo, enviar via SSH e extrair diretamente no servidor. Um bom exemplo disso são os arquivos do Magento. A pasta compactada tem cerca de 15MB e para enviar estes arquivos via FTP com uma ótima conexão, não leva menos de duas horas. Via SSH em poucos minutos o temos o arquivo disponível.

Para acessar o servidor via SSH, utilize um programa como o Putty do Windows ou acesse via Terminal do MAC ou do Linux.

Insira o seguinte comando:

ssh usuario_ftp@seu_dominio.com.br

Será solicitado a sua senha. Insira e aparecerá o console para que você possa a partir dos comandos do Linux copiar, excluir, mover, descompactar, fazer downloads diretamente em sua hospedagem.

Os principais comandos para você usar via SSH são

ls - listar arquivos (ex.: ls -la)
cp - copiar arquivos (ex.: cp file.txt pasta/filecopied.txt)
mv - mover arquivos (ex.: mv file.txt pasta/filemoved.txt)
rm - deletar arquivos ou diretrórios (ex.: rm -Rf dir)
wget - fazer o download de arquivos
tar - descompactar arquivos compactados com a extensão .tar.gz (ex.: tar -xfz arquivo.tar.gz)

O que fazer após instalar o wordpress?

Plugins

DB Backup – Efetua automaticamente o backup das tabelas da sua instalação wordpress. Recomendado utilizar a opção de enviar por backup por email e nunca usar a opção para salvar em pasta no seu servidor.

Maintenance Mode – Exibe uma mensagem de manutenção  para todos os usuários, exceto para os administradores.

Search & Replace – Efetua pesquisas em seu banco de dados e substitui de acordo com a opção configurada.

Clean WP Dashboard - Desabilita opções do dashboard para facilitar a vida do seu cliente.

WP No Category – Reescreve a url para tirar o /category/ do link. Atenção pois com a desativação de categoria pode ocorrer conflitos entre páginas e categorias.

wp-config.php

Para que toda vez que você precise atualizar o WordPress ou seus plugins, não seja solicitada se senha de ftp. Abra o wp-config.php e acrescente as seguintes linhas:

define('FTP_BASE', '/suainstalacaowordpress');
define('FTP_CONTENT_DIR', '/suainstalacaowordpress/wp-content/');
define('FTP_PLUGIN_DIR', '/suainstalacaowordpress/wp-content/plugins/');
define('FTP_USER', 'login');
define('FTP_PASS', 'senha');
define('FTP_HOST', 'ftp.seusite.com.br');
define('FTP_SSL', false);

Para sobrescrever a url do seu site sobre o informado no banco de dados utilize:

define('WP_SITE_URL', 'http://www.seusite.com.br');
define('WP_HOME', 'http://www.seusite.com.br');

Neste ponto é interessante utilizar o plugin search & replace para procurar pela url antiga nos seus posts e definições da base de dados. Lembrando que sempre que for utilizar este plugin faça o backup da base de dados.

define('FTP_CONTENT_DIR', '/suainstalacaowordpress/wp-content/');

Projeto Básico com Zend Tool

Existem uma série de diferenças na composição de um projeto com o Zend Framework e em cada fonte que se procura, é visto uma solução diferente.

Baseado nas minhas pesquisas, estou anotando abaixo uma sequência inicial para a configuração de um projeto inicial com o Zend Framework.

Estou levando em conta que a Zend Tool já está corretamente configurada no sistema. Então abra o prompt (windows) ou o terminal (mac/linux), navegue até a pasta onde será criado o seu projeto e digite:

zf create project helloworld

A Zend Tool neste ponto deve ter criado a estrutura do seu projeto, mas é necessário fazer algumas adaptações para um melhor aproveitamento e desempenho.

Abra o arquivo public/.htaccess e acrescente esta linha no início do arquivo:

SetEnv APPLICATION_ENV development

Crie uma pasta modules dentro de application, em seguida crie uma pasta default dentro de modules e mova os diretórios controllers e views para dentro dela.

É preciso ajustar algumas configurações antes de testar o seu projeto. Abra o arquivo application.ini e substitua a linha:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

por:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

Aproveitando que estamos tratando do frontController, adicione a variável de ambiente.

resources.frontController.env = APPLICATION_ENV

Adicione um include path para a pasta models logo abaixo do include para os arquivos do ZF.

includePaths.library = APPLICATION_PATH "/../library"
includePaths.models = APPLICATION_PATH "/models"

Inclua também o caminho da sua view e o encoding da sua aplicação.

resources.view.basePath = APPLICATION_PATH "/modules/default/views"
resources.view.encoding = "UTF-8"

Teste agora o seu projeto digitando http://localhost/helloworld/public/

Para adicionar um novo módulo, vá até a pasta modules e digite:

zf create module [nome-do-módulo]

Para adicionar um controller e uma view ao módulo digite:

zf create controller [nome_do_controller] 1 [nome-do-módulo]

Isto já é suficiente para ter um projeto básico rodando.

Como configurações adicionais ao application.ini podemos inserir

resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/default/controllers"
resources.frontController.defaultModule = "default"
resources.frontController.baseUrl = "/"

Mas até o momento não achei necessário utilizar, pois o módulo default sempre vai ser o default, indicar o defaultModule seria útil se decirmos usar outro módulo como padrão. O encoding você precisa estar atento na criação das suas views e quando salvar o seu arquivo. E os demais apontamentos de pastas já são executados normalmente pelo ZF, portanto até agora sem necessidade de indicar.

Instalação do Magento

A instalação do magento é bem fácil de executar, exceto por algumas particularidades que podem acarretar dificuldades no processo e são essas particularidades que pretendo focar nesta anotação.

Faça do download da versão Full Release mais recente em http://www.magentocommerce.com/download, neste momento a mais recente é a 1.4.1.1.

Descompacte e faça o upload dos arquivos para o seu servidor ou para a pasta que será usada no seu localhost.

Enquanto o processo de descompactação e transferência é executado, acesse o seu phpmyadmin e crie uma base de dados, neste momento não precisa se preocupar com o collation pois a própria instalação do Magento toma conta de fazer o setup correto.

Acesse a pasta onde copiou os arquivos do Magento e dê permissão de leitura e escrita (chmod 777) para as seguintes pastas e arquivos:

  • app/etc
  • media e subpastas
  • var
  • var/.htaccess
  • .htaccess

Após copiado todos os arquivos e criada a base de dados acesse pelo seu browser o endereço em que copiou os arquivos de instalação do Magento, algo como http://www.seusite.com.br/magento ou http://localhost/magento e aparecerá a tela inicial da instalação.

Aceite o contrato e clique em continue.

Selecione o País (Locale), Fuso (Time Zone) e Moeda (Default Currency). Caso não tenha feito a ajuste de permissões corretamente, o magento não guardará as opções selecionadas, mas se quiser pode deixar as opções padrão e posteriormente configurar no menu administrativo do Magento. Clique em continue.

Preencha o campo Host. Normalmente usa-se localhost, entretanto alguns provedores utilizam bases de dados com endereços ou números de IP fixo, preencha o campo com esses dados sem o http:// e sem a última barra do endereço.

No campo database digite o nome do banco de dados criado no início do processo, seguido dos campos Username (login) e Password (senha) do banco de dados utilizado. Em Table Prefix pode deixar em branco, mas para efeito de organização da sua base de dados, você pode utilizar um prefixo para as tabelas do Magento como mag_  assim todas as 310 tabelas do magento iniciarão com este prefixo facilitando a visualização do grupo de tabelas.

Na tela seguinte entre com as suas informações pessoais e atente para o endereço de email pois caso perca a sua senha será com ele que poderá recuperá-la. Cadastre o seu Username e Senha mas não utilize o mesmo da base de dados para termos mais segurança no projeto. Confirme a senha  e no campo Encription Key, digite alguma frase ou sequência de caracteres alfanuméricos. Esse campo será usado para as chaves de segurança do Magento. Clique em continue.

Se tudo foi efetuado corretamente você verá a tela de finalização da instalação. Copie e guarde o seu Encryption Key e clique nos botões Go to frontend para ver a sua loja padrão funcionando ou clique em Go to Backend para fazer o login no módulo administrativo.

Neste ponto verifiquei que as instalações em localhost geram alguns problemas como não efetuar o login recarregando a página sem nenhuma mensagem de erro.

Algumas das soluções que encontrei foi:

  • Usar http://127.0.0.1 no lugar de http://localhost/
  • Editar o arquivo app/etc/local.xml alterando a linha

    para

    
    
  • Ou editar o arquivo do core app/code/core/Mage/Core/Model/Session/Abstract/varien.php e comentar o seguinte trecho:
    // session cookie params
    $cookieParams = array(
      'lifetime' = $cookie->getLifetime(),
      'path'     = $cookie->getPath()/*,
      'domain'   = $cookie->getConfigDomain(),
      'secure'   = $cookie->isSecure(),
      'httponly' = $cookie->getHttponly()*/
    );
    

Com isso acredito já ser possível iniciar os trabalhos com a sua instalação do Magento.

Habilitando a opção Multi Site do WordPress 3.0

Ter em um mesmo domínio diversos sites, poder gerenciar todos de forma simplificada e ainda possibilitar o acesso individual é um trabalho que até pouco tempo atrás demandava horas de planejamento e muito mais de programação.

A partir do WordPress 3.0, a antiga versão MU que auxiliava no processo de instalação múltipla foi incorporada à versão bastando somente ser habilitada ao fim da instalação normal.

Proceda normalmente com a instalação simples do WordPress 3.0.

Na raiz da sua instalação, abra o arquivo wp-config.php e acima da linha que diz:

/* Isto é tudo, pode parar de editar! */

Digite:

define('WP_ALLOW_MULTISITE', true);

Para dar continuidade no processo é importante que todos os plugins estejam desativados. Feito isso acesse o menu Ferramentas e verá que surgiu um novo link chamado Rede. Acesse este link e com atenção preencha as informações pedidas.

  • Título da Rede
  • Endereço de email do administrador
  • Opção subdomínio ou pasta relativa (se for uma instalação localhost este item não aparecerá, a opção padrão é pasta relativa).

Para este processo eu não vou utilizar subdomínio que necessita de outros requisitos e caso tenha interesse pode ver mais a respeito em http://codex.wordpress.org/Create_A_Network.

Clique em instalar.

Neste ponto é importante que faça o backup do seu arquivo wp-config.php e .htaccess, se for a primeira instalação ou ainda não tiver customizado a sua instalação, provavelmente não terá ainda o arquivo .htaccess.

Crie abaixo da pasta wp-content uma nova pasta e dê o nome de blogs.dir. É importante que essa pasta tenha permissão de leitura e escrita (chmod 777).

Conforme descrito no item 2 da página de instalação, adicione ao arquivo wp-config.php, logo acima da linha:

/* Isto é tudo, pode parar de editar! */

o conteúdo do box branco que deve ser parecido com este:

define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', '*******' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

Adicione também as chaves de autenticação exibidas no segundo box:

define( 'AUTH_SALT', '******************************' );
define( 'SECURE_AUTH_SALT', '******************************' );
define( 'LOGGED_IN_SALT', '*******************************' );
define( 'NONCE_SALT', '*****************************' );

Crie ou edite o arquivo .haccess que está na raiz da sua instalação e adicione o conteudo do terceiro box:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Agora, se você acessar seu painel administrativo verá que foi criado um grupo de links com o título Super-Admin. Neste grupo de links que você vai gerenciar os sites que serão criados.