Expressão Regular para slug, permalinks ou url amigaveis usando pluggin meiomask

Expressões Regulares, Javascript, JQuery No Comments » Marcelo Korjenioski

Eu uso o plu­gin meio mask para gerar mas­ca­ras nos meus forms faz mais de 2 anos. Gosto deste plu­gin pq é muito fácil de apli­car regras para criar novos for­ma­tos e usa JQuery. Outra coisa boa é que este plu­gin é de um bra­si­leiro. Você pode dar uma con­fe­rida na docu­men­ta­ção em http://www.meiocodigo.com/projects/meiomask/

Eu pre­ci­sei criar uma mas­cara para um campo do tipo slug que não pos­sui acen­tos, carac­te­res espe­ci­ais e espa­ços em branco. A ER para isso é /[a-z0-9_-]/

Para adi­ci­o­nar a nova mas­cara com a regra abra o arquivo  jquery.meio.mask.js  procure


rules : {

'z': /[a-z]/,

'Z': /[A-Z]/,

'a': /[a-zA-Z]/,

'*': /[0-9a-zA-Z]/,

'@': /[0-9a-zA-ZçÇáàãâéèêíìóòôõúùü]/,

'x': /[a-z0-9_-]/

}

Um deta­lhe curi­oso foi que não se pode criar uma regra com o nome maior que um char que não fun­ci­ona. Quando adi­ci­o­nei a regra para per­mi­tir o uso do hífen “-“ vi que tinha uma outra regra limi­tando o uso deste char no bloco opti­ons onde tinha fixed­Chars : ‘[(),.:/ -]’ como con­fi­gu­ra­ção default do plu­gin. Então na ER onde eu colo­cava o “-” ele tinha o com­por­ta­mento de uma mas­cara fixa.
Para resol­ver vc tem que adi­ci­o­nar no opti­ons  fixedChars:null para fazer um over­write da con­fig padrão.

Veja como ficou a con­fig para usar a mascara.


$('input.slug').setMask({ mask : 'x', type:'repeat' , fixedChars:null});

Plu­gin Jquery meio mask com mas­cara para slug

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em ajudar.

Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Tags: , , ,

Sistema e manual para Calcular Frete SEDEX, e-SEDEX e PAC dos Correios (versão 1.2)

Ferramentas, Javascript, JQuery, PHP, XML 2 Comments » Marcelo Korjenioski

Esta semana meu sis­tema para cal­cu­lar frete parou de fun­ci­o­nar des­co­bri que teve alte­ra­ção no codigo de ser­viço de SEDEX que estava usando.
Adi­ci­o­nei nesta ver­são uma con­sulta com ajax usando prototype.

Código Ser­viço
40010 SEDEX sem con­trato
40045 SEDEX a Cobrar, sem con­trato
40126 SEDEX a Cobrar, com con­trato
40215 SEDEX 10, sem con­trato
40290 SEDEX Hoje, sem con­trato
40096 SEDEX com con­trato
40436 SEDEX com con­trato
40444 SEDEX com con­trato
40568 SEDEX com con­trato
40606 SEDEX com con­trato
41106 PAC sem con­trato
41068 PAC com con­trato
81019 e-SEDEX, com con­trato
81027 e-SEDEX Pri­o­ri­tá­rio, com con­rato
81035 e-SEDEX Express, com con­trato
81868 (Grupo 1) e-SEDEX, com con­trato
81833 (Grupo 2) e-SEDEX, com con­trato
81850 (Grupo 3) e-SEDEX, com contrato

Docu­men­ta­ção para uti­li­zar o web­ser­vice dos Cor­reios para efe­tuar o cal­culo de forma personalizada.

SCPP_Manual_Implementacao_Calculo_Remoto_de_Precos_e_Prazos

Abaixo segue o código para mani­pu­lar os dados do web­ser­vice usando o PHP.

Segue o exem­plo do código abaixo funcionando.

Para usar os código abaixo crie um arquivo index.php e adi­ci­one o fonte. Colo­que em um ser­vi­dor com suporte a PHP.


<?php
if($_POST) {

function frete($cod_servico,$cep_origem,$cep_destino,$peso,$comprimento=0,$altura=0,$largura=0) {

$cep_destino = eregi_replace("([^0-9])","",$cep_destino);
$cep_origem = eregi_replace("([^0-9])","",$cep_origem);

// Crio um objeto para manipular o XML.
$doc = new DomDocument;

// Carrega o arquivo XML com um arquivo DOMDocument

$doc->Load("http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?StrRetorno=xml&amp;amp;amp;amp;amp;nCdServico=" . $cod_servico . "&amp;amp;amp;amp;amp;nVlPeso=" . $peso . "&amp;amp;amp;amp;amp;sCepOrigem=" . $cep_origem . "&amp;amp;amp;amp;amp;sCepDestino=" . $cep_destino . "&amp;amp;amp;amp;amp;nCdFormato=1&amp;amp;amp;amp;amp;nVlComprimento=" . $comprimento . "&amp;amp;amp;amp;amp;nVlAltura=" . $altura . "&amp;amp;amp;amp;amp;nVlLargura=" . $largura . "&amp;amp;amp;amp;amp; sCdMaoPropria=n&amp;amp;amp;amp;amp;nVlValorDeclarado=0.50&amp;amp;amp;amp;amp;sCdAvisoRecebimento=n");

// Defino o nome do elemento pai (root).
$root = $doc->getElementsByTagName('cServico');

// Defino o nome dos elementos filhos no arquivo XML que eu desejo.

$children = array('Valor','PrazoEntrega');

// Faço um loop para pegar todos os elementos pai (root) encontrados.
$valor = array();
for ($i=0; $i < $root->length; $i++) {
// Pega o valor do atributo do elemento pai (root).
$id = $root->item($i)->getElementsByTagName('Codigo')->item(0)->nodeValue;

if($root->item($i)->getElementsByTagName('Erro')->item(0)->nodeValue > 0) {
echo $root->item($i)->getElementsByTagName('MsgErro')->item(0)->nodeValue;
die;
}

// Busca por elementos filhos (child) definidos no array
foreach ($children as $child) {
$valor[$id][$child] = $root->item($i)->getElementsByTagName($child)->item(0)->nodeValue;
}
}

return $valor;
}

// Código do Serviço que deseja calcular, veja tabela acima:
if ($_POST['cep-destino']) {
//$cod_servico = $_POST['servico'];
$cep_origem = '81010210';// CEP de Origem, em geral o CEP da Loja
$cep_destino = $_REQUEST['cep-destino'];// CEP de Destino, você pode passar esse CEP por GET ou POST vindo de um formulário
$peso = '0.300';// Peso total do pacote em Quilos, caso seja menos de 1Kg, ex.: 300g, coloque 0.300
// COMPRIMENTO: comprimento do volume em centímetros - somente número de 16 a 60
$comprimento = 16;
// ALTURA: altura do volume em centímetros - somente número de 2 a 60
$altura = 5;
// LARGURA: largura do volume em centimetros - somente número de 5 a 60
$largura = 11;
$fretes = frete('41106,40010',$cep_origem,$cep_destino,$peso,$comprimento,$altura,$largura);

if ($_GET['frase'] == true) {
echo "Olá, como vai?<br/>";
}

foreach ($fretes as $servico => $campos ) {
$valor = str_replace(",", ".", $campos['Valor']);

if($_POST['pequeno'] != 'true') {
$valor = $valor + 3.00;
} else {
$valor = $valor + 1.00;
}
$valor = number_format($valor,2, ',', '');
if($servico == '41106') {
echo " Valor PAC " . $valor . " prazo de entrega {$campos['PrazoEntrega']} dia(s).<br/>";
} elseif ($servico == '40010') {
echo " Valor SEDEX " . $valor . " prazo de entrega {$campos['PrazoEntrega']} dia(s).<br/>";
}
}

if ($_GET['frase'] == true) {
echo "Qualquer dúvida entre em contato.<br/> Boas compras.<br/>";
}
}

} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<title>DealShop - Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado. | Phaneronsoft</title>
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function submitForm() {
/*
usa método request() da classe Form da prototype, que serializa os campos
do formulário e submete (por POST como default) para a action especificada no form
*/
function mostrarLoading(){
$('loading').style.display = 'block';
$('value').innerHTML = ' ';
}

$('form-pesquisa-repasse').request({
onLoading:mostrarLoading,
onComplete: function(transport){
/*
se o retorno for diferente de -1, entende-se que não houve problemas, então apaga-se
os campos do formulário usando o método reset() da classe Form
*/
if(transport.responseText !=-1) {
$('loading').style.display = 'none';
$('value').innerHTML = transport.responseText;
} else {
$('form-pesquisa-repasse').reset();
$('loading').style.display = 'none';
$('value').innerHTML = 'Erro ao consultar';
}
}

});
return false;
}
</script>
<style type="text/css">

* {
font-family:"Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:12px;
font-style:normal;
font-variant:normal;
font-weight:normal;
line-height:normal;
}

.red{color:red !important;
}

body {
background:#FFFFFF none repeat scroll 0 0;
height:100%;
margin:0;
margin-top:20px;
width:100%;
}

div#wrapper {
margin:auto;
position:relative;
width:450px;
z-index:0;
}

.select {
text-transform:uppercase;
width:99%;
border:1px solid #B6B6B6;
display:block;
}

.formSearch fieldset {
border:1px solid #CCCCCC;
margin:0;
padding:0 10px;
}

label {
display:block;
/*float:left;*/
margin-right:4px;
padding-bottom:5px !important;
}

legend {
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
padding:10px 5px;
}

.button {
background:#F5EED3;
border:1px solid #CCCCCC;
color:#666666;
cursor:pointer;
font-size:12px;
font-weight:bold;
letter-spacing:1px;
margin:10px 0 0;
overflow:visible;
text-transform:uppercase;
width:150px;
}

.formMain .inline {
margin:15px 0 0 !important;
}

.text, .select, .textarea, .password {
border:1px solid #B6B6B6;
display:block;
text-transform:uppercase;
}

fieldset span.nameField {
color:#666666;
text-transform:uppercase;
}

h3 {
border-bottom:1px solid #F58220;
margin:0;
padding:0;
}

h3 span {
-x-system-font:none;
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
}

#value {
-x-system-font:none;
color:#9B0000;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;

}

#rastrear {
padding-top:30px;
}

#loading {
display:none;
color:#9B0000;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
text-transform:capitalize;
}
</style>

</head>
<body>

<div id="wrapper">

<span>Pesquisa valor de frete</span>

</h3>
<form id="form-pesquisa-repasse" action="" method="post" onsubmit="submitForm(); return false;" class="formMain formSearch wsizep100">
<input type="hidden" name="pequeno" value="<?php echo $_REQUEST['pequeno']; ?>" />
<fieldset>
<legend>Filtrar Referência</legend>
<!--label for="servico" class="wsize015">
<span class="nameField">Envio</span>

<select id="servico" name="servico" title="Serviços dos Correios" class="select" tabindex="1">
<option value="41106">PAC</option>
<option value="40010">SEDEX</option>
</select>
</label-->
<label class="wsize010" for="cep-destino">
<span class="nameField">CEP Destino</span>
<input id="cep-destino" class="text" type="text" value="" maxlength="9" title="CPF destino" name="cep-destino" tabindex="2"/>
</label>
<label for="pesquisar" class="wsize010">
<input type="button" onclick="submitForm(); return false;" value="pesquisar" class="button inline"/>
</label>
</fieldset>
</form>
<span>* Digitar somente número no CEP</span>
<br />
<span id="value"></span>
<span id='loading'>Pesquisando...</span>

<div id="rastrear">
<h3>
<span>Rastrear objetos no correio </span>
</h3>

<form target="_blank" method="GET" action="http://websro.correios.com.br/sro_bin/txect01$.Inexistente?" name="rastreamentohome">
<fieldset>
<legend>Identificador do objeto:</legend>
<input type="hidden" value="001" name="P_LINGUA"/>
<input type="hidden" value="002" name="P_TIPO"/>
<label for="P_COD_LIS" class="wsize010">
<textarea size="50" cols="48" rows="3" class="text" name="P_COD_LIS"></textarea>
</label>
<label for="pesquisar" class="wsize010">
<input type="button" onclick="document.forms[1].submit();" value="pesquisar" tabindex="3" class="button" />
</label>
</fieldset>
</form>
<span>
<p>Entre com as 13 posições do identificador do objeto.<br/>
Ex: SS123456789BR</p>
<p>Ou vários identificadores separados por ponto-e-vírgula.<br/>
EX: SS123456789BR;SE987654321BR</p>
</span>

</div>
</div>

</body>

</html>
<?php
} // fim else

?>

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Tags: , , , , , , ,

Como descompactar arquivo zipado no Dreamhost

PHP 2 Comments » Marcelo Korjenioski

Faz muito tempo que tenho pro­blema com o Dre­amhost para des­com­pac­tar arqui­vos. Já que o gen­re­ci­a­dor de arqui­vos da Dre­amhost não fun­ci­ona. Ten­tei usar SSH e dar coman­dos mas
tam­bem não con­se­guir fazer ao meu gosto.
Depois de muito pen­sar veio uma solu­ção sim­ples.
Crie um arquivo cha­mado unzip.php e colo­que o con­teudo tro­cando o nome do arquivo.zip para o nome do seu arquivo.zip.


<? exec("unzip arquivo.zip"); ?>

Depois basta subir unzip.php no mesmo dire­to­rio do arquivo zipado e exe­cu­tar ele pela url www.dominio.com/unzip.php.
Só feli­ci­dade agora :)

Tags: , , , , , ,

Usando Prototype para consulta AJAX com JSON

Ajax, Javascript, JQuery, Prototype No Comments » Marcelo Korjenioski

Hoje irei dar um exem­plo de como usar JSON com Pro­totype  em uma cha­mada via Ajax. Não estou muito acos­tu­mado com o Pro­totype mas come­cei a usar por ser um espe­ci­fi­ca­ção de um pro­jeto que estou tra­ba­lhando atualmente.

O JSON é um acrô­nimo para “JavaScript Object Nota­tion” e é um padrão para a troca de men­sa­gens. JSON é muito usado em cha­ma­das Ajax por ser mais sim­ples e mais leve que SOAP que usa XML.

Abaixo segue um exem­plo de um objeto JSON que irei usar neste tuto­rial.
Crie um arquivo cha­mado conteudo.htm e insira o código abaixo.

{ "jogos" : [
{ "nome": "World of Warcraft", "preco": "49,90" },
{ "nome": "Diablo 3", "preco": "89,90" },
{ "nome": "StarCraft 2", "preco": "49,90" }
]
}

Agora basta criar um arquivo com o nome index.htm e inse­rir o con­teúdo abaixo.

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.1.0/prototype.js"></script>
</head>
<body>
<input type="button" name="pesquisar" onclick="pesquisar();" value="pesquisar"/>
<script>
function pesquisar () {
var request = new Ajax.Request('conteudo.htm', {
'method' : 'post',
'parameters' : {
'codigo' : '1'
},
'onComplete' : function(response) {
var text = response.responseText.stripTags();
// Transformo o texto em objeto
var objeto = text.evalJSON();
var jogos = objeto.jogos;
var str = "";

jogos.each(function(jogo) {
str += jogo.nome + ' ';
str += jogo.preco + '\n';
});
alert(str);
}
});
}
</script>
</body>
</html>

Agora é neces­sá­rio que os dois arqui­vos este­jam no mesmo dire­tó­rio para que o exem­plo fun­ci­one.
Cli­cando no botão pes­qui­sar será feita uma con­sulta via Ajax para conteudo.htm retor­nando os valo­res do arquivo.

Caso tenha alguma duvida uma outro opi­nião sobre o Post deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais e Posts aqui apresentados.

Tags: , , , , ,

Padrão de nomenclatura para classes usadas em JavaScript evita problemas

CSS, Javascript, Padrões 3 Comments » Marcelo Korjenioski

Esta semana des­co­bri um pro­blema em se usar nome da clas­ses de estilo para iden­ti­fi­ca­ção em fun­ções javas­cript. A situ­a­ção foi que outro pro­gra­ma­dor ao migrar o layout do sis­tema  apa­gou o nome de  clas­ses que esta­vam sendo usa­das no JS via Pro­totype para vali­da­ção de cam­pos.  Como não exis­tia um padrão para o nome das clas­ses minha solu­ção para evi­tar futu­ros pro­ble­mas foi criar um padrão de nomen­cla­tura “jsNo­me­Da­Classe” assim quando alguem ver o “js” na frente do nome da classe indica uma refe­ren­cia para uma fun­cao JS.
No exem­plo abaixo eu usei o padrão jsNo­me­Do­Bo­tao para que se algum pro­gra­ma­dor ver o nome dessa classe saiba que tem uma fun­ção JS atri­buida e não apa­gue ou altere o nome
da classe em uma manu­ten­ção ou troca de layout do sistema.

<html>
<head>
<title>Validar</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</head>
<body>
<form>
<input class="jsNomeDoBotao" type="button" name="botao_1" value="botao 1" /><br/>
<input class="jsNomeDoBotao" type="button" name="botao_2" value="botao 2"/><br/>
<input class="jsNomeDoBotao" type="button" name="botao_3" value="botao 3"/><br/>
<input class="jsNomeDoBotao" type="button" name="botao_4" value="botao 4"/><br/>
<input class="jsNomeDoBotao" type="button" name="botao_4" value="botao 5"/>
</form>
<script type="text/javascript">
// Adiciono um alert para todos os inputs com o nome de class jsNomeDoBotao.
$(".jsNomeDoBotao").bind("click", function(event) {
alert(this.name);
});
</script>
</body>
</html>

Caso tenha alguma duvida uma outro opi­nião sobre o Post deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais e Posts aqui apresentados.

Tags: , ,

Atualizar Dashboard Xbox360 usando PenDrive (Destrava HD de console Banido)

Sites 10 Comments » Marcelo Korjenioski

Mudando um pouco do foco do Blog achei impor­tante com­par­ti­lhar esta infor­ma­ção sobre a nova Dash­bo­ard do Xbox 360 que saiu esta semana que libera o uso de Pen­Drive USB para gra­var jogos e que tam­bém libe­rou a ins­ta­la­ção de jogos no HD dos con­so­les bani­dos da Live. A atu­a­li­za­ção é sim­ples e pode ser feita via Pen­Drive. Basta o pen­drive estar for­ma­tado como FAT32 e bai­xar este arquivo e des­com­pac­tar na raiz do drive USB. Colo­que o Pen­drive na porta USB tra­seira do seu Xbox 360 com ele des­li­gado. Quando ligar o con­sole ele irá reco­nhe­cer o dis­po­si­tivo e irá come­çar a atu­a­li­za­ção.  Ou se pre­fe­rir conecte o pen­drive no con­sole ligado e vá nos arqui­vos do sis­tema e cli­que no dis­po­si­tivo USB  que ele tam­bem irá fazer o Update.

Segue o link do site da MS de onde peguei a atualização.

Caso tenha alguma dúvida deixe um comen­tá­rio que terei pra­zer em ajudar.

Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Tags: , ,

Número primos em Java

Sites No Comments » Marcelo Korjenioski

Faz um bom tempo que não posto nada mas agora estou vol­tando e irei criar tuto­ri­ais bási­cos sobre Java.

Eu a pouco tempo parei de tra­ba­lhar com PHP para come­çar com Java. Não estou dei­xando o PHP de lado ape­nas mudei de lin­gua­gem para melho­rar meu salá­rio. AS vagas de PHP aqui em Curi­tiba estão com salá­rios meno­res que as de Java. Con­ti­nuo tra­ba­lhando com Web e os tuto­ri­ais de PHP irão continuar.

Come­cei a fazer Pos em Java na UTFPR e na aula de nive­la­mento foi pedido para criar um algo­ritmo para núme­ros primos.

Encon­trei uma boa expli­ca­ção da lógica dos núme­ros pri­mos no Yahoo! Res­pos­tas e fiz o código base­ado nele.

import java.io.IOException;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Marcelo Korjenioski
*/
public class NumerosPrimos {

public static void main(String[] args) {
System.out.println("Entre com valor");
byte[] b = new byte[10]; //buffer
try {
System.in.read(b);
int numero = Integer.parseInt(new String(b).trim());
for (int i = 0; i <= numero; i++) {
if (primo(i)) {
System.out.println(i);

}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static boolean primo(int numero) {
boolean resultado = true;
// numero 1 não é primo pois é divisivel apenas por ele mesmo
if(numero <= 1) {
resultado = false;
} else if(numero % 2 == 0 &amp;amp;&amp;amp; numero > 2) {
// Feita a verificacao apenas para otimizar o codigo
// aqui eu descarto todos os numero pares divisiveis por 2 maior que 2 assim so vai sobrar os impares
resultado = false;
} else if(numero % 3 == 0 &amp;amp;&amp;amp; numero > 3) {
// Feita a verificacao apenas para otimizar o codigo
// agora eu tiro todos os numero impares divisiveis por 3 maior que 3.
resultado = false;
}else {
// numero com raiz exata não é primo.
int raiz = (int)Math.sqrt(numero) + 1;
// verifico se o numero é divisivel por algum outro numero menor que ele.
for(int i=3;i<raiz;i+=2) {
// caso divida com algum numero ele não é primo e paro o loop.
if(numero % i ==0) {
resultado = false;
break;
}
}
}
return resultado;
}
}

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em ajudar.

Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Tags: , , ,

Adicionar HTML no ZEND Form de maneira rapida e limpa

HTML, PHP, Zend Framework 9 Comments » Marcelo Korjenioski

Criei uma solu­ção para adi­ci­o­nar HTML no form do Zend é sim­ples e efi­ci­ente. O código foi melho­rado com a ajuda do Marcaum54 que deu a ideia de fazer um over­write no metodo isVa­lid.
Basta criar um classe no dire­tó­rio library/ com o nome Htmlform.php e adi­ci­o­nar o código


<?php
/**
* Adiciona conteudo HTML no ZendForm
* @copyright Phaneronsoft
* @author Marcelo Korjenioski - korjenioski@gmail.com
* @see www.phaneronsoft.com
* @filesource Htmlform.php
* @version 1.0
* @since 11/02/2010
* @category library
* @package library
*/
class Htmlform extends Zend_Form_Element_Xhtml
{
/**
* View helper padrão para rederizar
* @var string
*/
public $helper = 'formNote';
/**
* Faço o Overwrite do metodo para não perder o conteudo na validação.
* @see Zend_Form_Element::isValid()
*/
public function isValid($value, $context = null) {
return true;
}

}

Agora no For­mu­lá­rio você irá cha­mar ela usando.

$html = new Htmlform('nome_do_elemento');
$html->setValue('<strong>teste</strong>');
$this->addElement($html);

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Tags: , , ,

Shell Script (Linux)

Sites No Comments » J. C.

— —  —  —  —  —  —  —  — —

#!/bin/bash

echo “Fala ae Mundo!”

— —  —  —  —  —  —  —  — —

Está ai o seu pri­meiro Shell Script, vou expli­car de forma mais detalhada:

Abra seu ter­mi­nal de comando e nele vamos nave­gar até a pasta /tmp (caso não tenha a pasta tmp, você pode criar ela no dire­tó­rio /home, usando o comando mkdir tmp

Agora que esta­mos na pasta /home/tmp, vamos criar um arquivo cha­mado: 1shell.sh, para criar um arquivo vazio basta usar o comando touch “nome­do­ar­qui­vo­e­ex­ten­são” (sem as aspas).

Uti­lize o comando ls para exi­bir os arqui­vos que estão na pasta /home/tmp para certificar-se que seu 1shell.sh foi cri­ado corretamente.

Vamos para a edi­ção deste novo shells­cript, mas antes uma pequena com­pa­ra­ção para faci­li­tar a vida de todos, o que é um shells­cript se não um .bat do linux :P , ok vol­tando a edi­ção: abra seu arquivo shell com o edi­tor de texto vi, para isso digite: vi 1shell.sh.

Den­tro do edi­tor aperte a tecla i para incluir seu texto e digite como está la em cima no começo do post.

A linha #!/bin/bash é o que indica para o linux que seu arquivo é um shells­cript. Depois de digi­tar o texto, pre­ci­one ESC para parar de incluir e digite :wq, esse ultimo comando é sal­var e sair. Certo antes de exe­cu­tar seu shell você deve dar as per­mis­sões neces­sa­rias para ele rodar como um executavel.

Para isso você deve usar o comando chmod +x “nome­do­ar­quivo”. Fazendo isso você vai alte­rar a per­mis­são dele para que possa ser executavel.

Agora vamos ao teste :D digite: ./1shell.sh e veja o resul­tado na tela!!!

root@intranet:/home# mkdir tmp

root@intranet:/home# cd tmp

root@intranet:/home/tmp# ls

root@intranet:/home/tmp# touch 1shell.sh

root@intranet:/home/tmp# ls

1shell.sh

root@intranet:/home/tmp# vi 1shell.sh

rea­ding 1shell.sh

root@intranet:/home/tmp# chmod +x 1shell.sh

root@intranet:/home/tmp# ./1shell.sh

Fala ae Mundo!

root@intranet:/home/tmp#

Logo vou expli­car mais coman­dos e com eles você podera incre­men­tar seu shell, e até mesmo pro­gra­mar nele!

Abra­ços e até a proxima.

Tags: , ,

Descobrir ID de elemento através de uma Class usando JQuery

HTML, Javascript, JQuery, Sites No Comments » Marcelo Korjenioski

Des­co­brir ID de ele­mento atra­vés de uma Class usando JQuery é o tema de hoje.
Eu não sou o tipo do pro­gra­ma­dor que fica se pre­o­cu­pando com a quan­ti­dade de linhas por arquivo.
Gosto mesmo é de criar um código sim­ples e de fácil manu­ten­ção. Esta semana estava que­rendo colo­car
um efeito “slide” em algu­mas lis­tas porem não que­ria criar uma fun­ção para cada lista. Então resolvi
criar uma classe comum para elas e atri­buir IDs para os botões e para as lis­tas. Desta maneira foi sim­ples
resol­ver meu pro­blema pois posso iden­ti­fi­car os IDs dos ele­men­tos atra­vés da classe.
Segue o código abaixo para expli­car melhor a situação.

Segue o exem­plo funcionando


<head>
<title>Descobrir id de elemento usando uma classe com JQuery</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
ul {list-style:none;}
* {margin:0;padding:0;border:0px;}
html {height:100%;}
.agrupa_programacao {float:left;display:inline;width:970px;margin-top:30px;}
.divisao_programacao {float:left;display:inline;width:230px;margin-right:10px;}
.lista_programacao,.lista_programacao2 {float:left;display:inline;width:228px;margin-top:5px;background:#fff;border:1px solid #bbb;}
.lista_programacao2 {margin-top:0px;border-top:0px}
.tit_programacao, .tit_programacao2, .tit_programacao3 {float:left;display:inline;width:198px;height:20px;background:#acbcc0 url(../img/seta.jpg) no-repeat 9px 16px;padding:12px 0 12px 30px;text-align:left;font:14px Verdana, Arial, Helvetica, sans-serif;font-weight:bold;color:#fff;border-bottom:1px solid #fff;}
.tit_programacao2 {color:#133c8b;background:#f4f1f1;}
.tit_programacao3 {background:#d9eff3 url(../img/seta2.gif) no-repeat 9px 7px;padding:5px 0 5px 30px;color:#133c8b;font:bold 12px Verdana, Arial, Helvetica, sans-serif;}
h3.tit_programacao3{border-left:1px solid #BBBBBB;border-right:1px  solid #BBBBBB;cursor:pointer;}
.txt_programacao, .txt_programacao2, .txt_programacao3 {float:left;display:inline;width:198px;padding:10px 15px 10px 15px;background:#f4f1f1;font:11px Verdana, Arial, Helvetica, sans-serif;color:#5e5e5e;border-bottom:1px solid #fff;}
.txt_programacao2 {background:#d7d7d7;}
.txt_programacao3 {background:#fff;}
</style>
</head>
<body>
<div>
<h3 id="frutas">Frutas</h3>
<ul id="frutas_lista">
<li id="1">Abacaxi</li>
<li id="2">Pera</li>
<li id="3">Maça</li>
</ul>
<h3 id="verduras">Legumes</h3>
<ul id="verduras_lista">
<li id="1">Alface</li>
<li id="2">Couve</li>
<li id="3">Cenoura</li>
</ul>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(){ // Inicio o script apenas quando toda a pagina estiver carregada.
// Atribuo a função onclick em todos os elementos com a classe informada
$(".tit_programacao3").click(function () {
//Pego o ID do elemento.
var id = $(this).attr('id');
// Como defini os ids para o titulo e lista, apenas faço uma
// concatenação para identificar a lista para receber a ação.
if ($("#" + id + "_lista").is(":hidden")) {
$("#" + id + "_lista").slideDown("normal");
} else {
$("#" + id + "_lista").slideUp("normal");
}
});
});
</script>
</body>
</html>

Asso­ci­ando a classe com id é pos­sí­vel redu­zir a quan­ti­dade de código faci­li­tando a manu­ten­ção e agi­li­zando o desenvolvimento.

Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apre­sen­ta­dos.
É isso pes­soal uma ótima semana e até o próximo post.

Tags: , ,
Designed by NattyWP Wordpress Themes.
Images by desEXign.