Sortable no CakePHP 2.+

Hoje em dia com a “tal” web 2.0 é comum depararmo-nos durante o desenvolvimento de um projeto com a necessidade da utilização de recursos AJAX de diversos tipos, e o que veremos neste post será a utilização do sortable (Jquery UI).

Ele permite com um simples arrastar do mouse modificar a ordem de linhas de uma lista qualquer, seja ela uma lista propriamente dita, linhas de uma tabela ou divs. Neste exemplo utilizarei uma tabela e estou levando em conta que você já tenha conhecimento básico sobre o CakePHP e sobre jQuery.

Requerimentos:

  •  CakePHP 2.+
  • jQuery
  • jQuery UI

Primeiro Passo:

Crie uma entidade em seu banco de dados chamada categories com a seguinte estrutura:

CREATE TABLE `categories` (

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

`name` VARCHAR(60) DEFAULT NULL,

`sort_order` INT(10) UNSIGNED DEFAULT NULL,

PRIMARY KEY (`id`)

);

 

Segundo Passo:

Utilize o BAKE para criar o modelo, o controle e a visualização da entidade criada no passo um (categories). PS (Você pode usar sua forma preferida para criar essas classes).

Terceiro Passo:

Para usarmos o Helper JS é necessário inserirmos a seguinte linha antes da tag body em seu layout da seguinte forma:

<?php echo $this->Js->writeBuffer();?>
</body>
</html>

 Quarto passo:

Precisamos agora declarar no controlador em questão que usaremos o Helper JS

class CategoriesController extends AppController {

public $helpers = array('Js' => array('Jquery'));

 Quinto passo:

Crie duas novas ações no controlador criado (categories)

class CategoriesController extends AppController {

public $helpers = array('Js' => array('Jquery'));

public function sort() {
$this->set('categories', $this->Category->find('all',array(
'order' => 'sort_order ASC',
)
));
}

public function reorder() {

foreach ($this->data['Category'] as $key => $value) {
$this->Category->id = $value;
$this->Category->saveField("sort_order",$key + 1);
}
exit();
}

Sexto passo:

Crie uma visualização para a ação sort (sort.ctp)

<div class="demo">
<?php echo $this->Html->link(__('Salvar'), array('action' => 'index'), array('id'=>'salvar')); ?>
<table class="table table-bordered table-striped">
        <tbody id="sortable">
    <?php
    foreach ($categories as $category):
    ?>
    <tr id="Category_<?php echo $category['Category']['id']; ?>">
        <td><?php echo $category['Category']['name']; ?></td>
        <td>teste<?php echo $category['Category']['name']; ?></td>
    </tr>
    <?php
    endforeach;
    ?>
        </tbody>
    </table>




</div>




<?php
$this->Js->get('#salvar');
    $this->Js->event('click',
        $this->Js->request(
            array(
                'action' => 'reorder',
            ),
            array(
                'method'=> 'post',
                'dataExpression' => true,
                'data' => '$("#sortable").sortable("serialize")',
                'async' => true,
                'update' => '#element'
            )
        )
    );
?>
<?php
$this->Js->get('#sortable');
$this->Js->sortable();
?>

 

 

 

Restaurando os ícones dos painéis superiores no Ubuntu

Não sei porque, mas vez ou outra some algum ícone de um ou mais painéis do Ubuntu.

Há vários artigos por aí falando como restaurá-los, pra eu parar de procurar quando precisar e ajudar alguém com uma “boa ação do dia” aí vai:

 

jackson@jackson:~$ gconftool-2 --shutdown
jackson@jackson:~$ rm -rf ~/.gconf/apps/panel
jackson@jackson:~$ pkill gnome-panel
jackson@jackson:~$

Calcular frete no magento usando apenas o campo CEP

Uma coisa que a maioria de nós identifica quando acaba de instalar o Magento, é que na hora de calcular o frete na página do pedido o sistema exibe dois campos que pelo menos para mim não são necessários, que são eles País e Estado além é claro do CEP, que seria o único necessário no meu caso e acredito que no seu também se está lendo esse post.

Clique na imagem para ampliá-la

A primeira coisa que fazemos(é óbvio) é procurar no Google se há algum post falando sobre o assunto, é há vários, porém os que eu encontrei indicavam que deveria ser feita uma alteração em um arquivo que não era encontrado no diretório da versão utilizada por mim, sendo assim que fique bem claro que este post foi escrito com base na versão do Magento 1.5.1.

Abra o diretório app -> design -> frontend -> base -> default -> template -> checkout -> cart

Neste diretório edite o arquivo shipping.phtml

Procure pelas linhas :

<p><?php echo $this->__('Enter your destination to get a shipping estimate.') ?></p>

<ul class="form-list">

Abaixo de <ul class=”form-list”> insira <div class=”no-display”>

De forma que fique assim:

<p><?php echo $this->__('Enter your destination to get a shipping estimate.') ?></p>

<ul class="form-list">

<div class="no-display">

<li>

<label for="country" class="required"><em>*</em><?php echo $this->__('Country') ?></label>

<div class="input-box">

<?php echo Mage::getBlockSingleton('directory/data')->getCountryHtmlSelect($this->getEstimateCountryId()) ?>

</div>

</li>

<?php //if($this->getStateActive()): ?>

[...]

Agora basta fechar a tag div antes de <li> do campo CEP, assim:

</div>

<li>

<label for="postcode"<?php if ($this->isZipCodeRequired()) echo ' class="required"' ?>><?php if ($this->isZipCodeRequired()) echo '<em>*</em>' ?><?php echo $this->__('Zip/Postal Code') ?></label>

Pronto! Acredito que alguns temas podem ter personalizado essa parte e seja necessário procurar pelo código dentro do mesmo, aqui pra mim funcionou tanto com o tema padrão como no Modern.

Clique na imagem para ampliá-la

 

 

Instalando o cakePHP

Atendendo a pedidos de principalmente alguns alunos, vou tentar de forma mais simples possível, passar neste post como instalar o cakephp.

Como todo projeto Open source, e com o cake não deve ser diferente,  devemos ter bastante atenção com o versionamento da ferramenta.

Atualmente, estou desenvolvendo uma aplicação interna para a empresa usando a versão 1.3.8, sendo assim, eu sugiro que, caso não tenha muito conhecimento, siga na risca o tutorial, pois pode haver alguma mudança significativa de uma versão para outra que atrapalhe seu aprendizado.

Primeiro faça download da aplicação neste link: https://github.com/cakephp/cakephp/downloads.

Descompacte o arquivo em seu diretório de trabalho(diretório que você costuma acessar via navegador pelo endereço localhost).

Renomeie o diretório para cakephp (de forma que ele seja acessível pelo seu navegador no endereço  localhost/cakephp ).

Acesse o endereço http://localhost/cakephp/ e veja que você receberá alguns avisos de que faltam algumas alterações.

Clique na imagem para ampliá-la

A primeiras linhas são mensagens do PHP e se elas não apareceram para você , aconselho que você defina nas configurações de seu PHP para que seja exibidas mensagens desse tipo.

As duas próximas linhas, também são geradas pelo PHP e só serão exibidas caso a variável necessária em seu PHP esteja definida para que isso ocorra.

A linha que diz Your tmp directory is NOT writable, e foi gerada pelo cake para lhe informar que o diretório  /cakephp/app/tmp/ não é gravável e você agora precisa tornar esse diretório gravável pelo seu sistema operacional, no Ubuntu você pode fazer da seguinte forma:

chmod -R 777 www/cakephp/app/tmp/

Agora, que já tornamos o diretório tmp gravável, precisamos altera duas propriedades no arquivo core.php localizado em cakephp/app/config. São elas Security.salt e Security.cipherSeed

Localize as seguintes linhas:

/**
* A random string used in security hashing methods.
*/
Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');

/**
* A random numeric string (digits only) used to encrypt/decrypt strings.
*/
Configure::write('Security.cipherSeed', '76859309657453542496749683645');

Altere como informado abaixo

/**
* A random string used in security hashing methods.
*/
Configure::write('Security.salt', 'ALTERE AQUI!');

/**
* A random numeric string (digits only) used to encrypt/decrypt strings.
*/
Configure::write('Security.cipherSeed', 'ALTERE AQUI!);

 

Acesse novamente a página principal e observe ainda há um aviso de que você ainda não configurou o arquivo necessário por informar os dados do banco de dados:

Your database configuration file is NOT present.
Rename config/database.php.default to config/database.php

No diretório cakephp/app/config renomeie o arquivo database.php.default para database.php

 

Agora temos que informar ao cake qual o banco de dados usaremos e quais são os dados de localização:

Edite o aquivo renomeado database.php

var $default = array(
'driver' =&gt; 'mysql', // Informe o drive do banco de dados
'persistent' =&gt; false, // Se usará ou não uma conexão persistente. Deixe como false
'host' =&gt; 'localhost', // Endereço do servidor do banco de dados
'login' =&gt; 'root', // Nome de usuário
'password' =&gt; '', // Senha usado pelo usuário informado, no meu caso não utilizo senha no servidor local
'database' =&gt; 'cakephp', // Nome do banco de dados
'prefix' =&gt; '', // Prefixo usado antes dos nomes das entidades
);

Acesse ou atualize a página novamente e se o banco informado ainda não tiver sido criado você verá o aviso:

Cake is NOT able to connect to the database

Caso ainda não tiver criado o banco, crie e veja que a página estará sem nenhum aviso em amarelo.

E isso aí, agora você tem o cake instalado e a ponto de bala pra começar um novo projeto, no próximo post vamos desenvolver algo simples para começarmos pegar o gostinho.

Abração!

Marcado com: , , ,

Entenda o padrão MVC e descubra um novo mundo

É impressionante como dependendo do ambiente em que vivemos, só descobrimos algumas coisas tempos depois que elas foram descobertas ou inventadas, estou me referindo ao padrão de desenvolvimento MVC que só anos depois ouvi falar nele. E como estou tendo a experiência de lecionar na mesma instituição onde concluí meu curso técnico na área de desenvolvimento, admito que nunca ouvi falar em MVC, e tão pouco em orientação a objetos durante este curso, mas, agora vivendo a realidade do mercado, recebo periodicamente alunos de cursos como este se oferecendo para vagas de trabalho e/ou estágios.

O problema começa aí, quando a capacitação necessária para suprir a demanda existente no mercado não existe, aí existem empresas que oferecem a estes alunos ou ex alunos, uma vaga intitulada de operador de suporte ou alguma coisa parecida com isso. O problema é que na verdade, geralmente o recém formado recebe a promessa de que ele ocupando tal vaga terá a chance de aprender as técnicas e processos reais necessários para o desenvolvimento de um projeto de software, o que na maioria dos casos não acontece, pois se a empresa precisa de alguém para atender clientes, esse indivíduo não tem tempo para se dedicar ao aprendizado com os colegas do setor de desenvolvimento.

Se mais enrolações, vamos ao real objetivo deste post. A partir de hoje publicarei posts sobre desenvolvimento usando o framework CakePHP, uma ferramenta escrita em PHP responsável por agilizar o desenvolvimento de projetos para web, que usa a arquitetura MVC tornando os projetos mais fáceis, rápidos, portáteis entre outras vantagens que veremos durante as publicações.

Marcado com: , ,

O objetivo do blog

Acredito que  todas, ou quase todas as pessoas que tem acesso a blogs, pensam em ter em algum momento um blog também, e aí cai a ficha que não será fácil, que será mais uma ferramenta que ela terá que acompanhar diariamente e então decide esperar ou colocar no ar e não mexe mais.

É chegado o momento de decidir se o blog será ou não necessário, registrar um domínio, contratar uma hospedagem, mas qual será o assunto de meu blog? Quem serão as pessoas que possivelmente se interessarão pelo blog? É preciso que ele me gere capital direto? eu tenho como mantê-lo? por quanto tempo? Enfim, como em várias outras análises, dependerá de cada um.

Mas falando do objetivo de meu blog, este foi criado para compartilhar meus conhecimentos, dúvidas, e principalmente novos aprendizados com clientes, amigos, parceiros, alunos e demais pessoas interessadas.

Top