terça-feira, 13 de dezembro de 2011

Cadastro Facilitado Opencart


A empresa a onde trabalho irá começar a revender produtos de uma outra loja, eu e mais um rapaz estavamos perdendo pelo menos 10 minutos, entre copiar e colar as informações do produto do site original, baixar as imagens do produto, colocar no servidor e organizar as pastas com as imagens.
Por isso desenvolvi esse arquivo, no qual o usuário tem que configurar o nome do banco, nome do usuario, senha de acesso e o ip do servidor do banco, caso esteja em uma maquina diferente da onde esteja o arquivo.
Feito isso é só acessar e cadastrar.
Preenchendo os campos:
Nome do Produto
Modelo do Produto : Sendo retirado alguns caracteres \, ", ', *, troco \ por -, colocando todas as letras em minusculas e ja corto em 64 caracteres(tamanho maximo admitido pelo opencart). Esse modelo tambem adiciono como keyword, description
Preço do Produto
Fabricante : Ele vai pesquisar no banco os fabricantes apresentando um select para a escolha.
Diretório : Ele vai mostrar todas as pastas dentro de "/image/data", que não contenham espaços " "(utilizamos essa diferenciação para que não sejam exibidas as pastas de cada produto apenas as pastas das categorias, nas quais não utilizamos espaços em branco, para que a lista não ficasse muito grande), na pasta que for escolhida será criada uma pasta com o nome do modelo do produto e dentro desta pasta sera guardado as imagens, a pasta terá permição 777.
Imagens : São oito campos de texto para se colocar a URL da imagem (Como eu tinha um site para "retirar as imagens", era muito chato baixa-las e coloca-las no servidor) o php vai usar um comando "wget" para baixar a imagem e ja vai salva-la na pasta correta e inserir essa informação no banco, a primeira imagem será inserida como a principal e os outros serão imagens adicionais, assim coloque as URL's na ordem que desejar que elas apareção
Categorias : Selecione todas as categorias que quiser.
Descricao 
Peso
Largura
Altura
Comprimento
E finalmente envie.
Reduzi o tempo de cadastro dos produtos para 3min.
Espero ter ajudado
Abraços a Todos

<?php
function consulta($query){
   $nome_banco = 'nome do banco';
   $senha_banco = 'senhado banco';
   $usuario_banco = 'usuario';
   $local_banco = '127.0.0.1';
   $conexao = mysql_pconnect($local_banco, $usuario_banco, $senha_banco);
   if(!$conexao){die('Não foi possível conectar: '.mysql_error());}
   $banco = mysql_select_db ($nome_banco, $conexao);
   if(!$banco){die('Não foi possível conectar no banco: '.mysql_error());}
   $resultado = mysql_query($query, $conexao);
   if(!$resultado){die('<br />Não foi possível fazer a consulta: '.mysql_error().'<br />'.$query);}
   if (strpos($query, 'SELECT') !== false) {
      $i=0;
      while($result = mysql_fetch_assoc($resultado)) {
         foreach ($result as $key=>$valor){$var[$i][$key] = $valor;}
         $i++;
      }
      return $var;
   }
}
if ($_REQUEST['nome'] != "") {
   $_REQUEST['modelo'] = substr(strtolower(str_replace("/", "-", str_replace("\\", "", str_replace('"', '', str_replace("*", "", str_replace("'", "", $_REQUEST['modelo'])))))), 0, 63);
   consulta("INSERT INTO product (model, quantity, stock_status_id, image, manufacturer_id, shipping, price, points, tax_class_id, date_available, weight, weight_class_id, length, width, height, length_class_id, subtract, minimum, sort_order, status, date_added, date_modified, viewed) VALUES ('".$_REQUEST['modelo']."', 1000, 7, '', '".$_REQUEST['fabricante']."', 1, '".$_REQUEST['preco']."', 0, 0, DATE(NOW()), '".$_REQUEST['peso']."', 1, '".$_REQUEST['largura']."', '".$_REQUEST['comprimento']."', '".$_REQUEST['altura']."', 1, 0, 1, 1, 1, NOW(), NOW(), 0)");
   $produto = consulta("SELECT `product`.`product_id` FROM `product` WHERE `product`.`model` = '".$_REQUEST['modelo']."' && price LIKE '".$_REQUEST['preco']."%' LIMIT 1");
   $id = $produto[0]['product_id'];
   consulta("INSERT INTO product_to_store (product_id, store_id) VALUES ($id, 0)");
   consulta("INSERT INTO product_description (product_id, language_id, name, description, meta_description, meta_keyword) VALUES ($id, 2, '".$_REQUEST['nome']."', '".$_REQUEST['descricao']."', '".$_REQUEST['modelo']."', '".$_REQUEST['modelo']."')");
   foreach($_REQUEST['categorias'] as $categoria) {
      consulta("INSERT INTO product_to_category (product_id, category_id) VALUES ($id, $categoria)");
   }
   $pasta = getcwd()."/data/".$_REQUEST['pastas']."/".$_REQUEST['modelo'];
   mkdir($pasta, 0777);
   $img = 0;
   foreach($_REQUEST['imagens'] as $imagem) {
      if($imagem != "") {
         $nome = end(explode("/", $imagem));
         shell_exec("wget -O \"$pasta/$nome\" \"$imagem\" ");
         if ($img == 0) {
            consulta("UPDATE `product` SET image = 'data/".$_REQUEST['pastas']."/".$_REQUEST['modelo']."/$nome' WHERE product_id = '$id'");
            $img++;
         } else {
            consulta("INSERT INTO product_image (image, product_id) VALUES ('data/".$_REQUEST['pastas']."/".$_REQUEST['modelo']."/$nome', $id)");
         }
      }
   }
}

$diretorio = getcwd()."/data";
function lerpastas($pasta) {
   $ponteiro  = opendir($pasta);
   while ($itens = readdir($ponteiro)) {
         if ($itens!="." && $itens!=".."){
         if (!strpos($itens, ".") && !strpos($itens, " ")) {
            $pastas[] = $pasta."/".$itens;
            $pastas[] = lerpastas($pasta."/".$itens);
         }
      }
   }
   return $pastas;
}
function escreverpastas($pastas) {
   foreach ($pastas as $pasta) {
      if(is_array($pasta)) {
         $result .= escreverpastas($pasta);
      } else {
         if($pasta != "") {
            $pasta = str_replace(getcwd()."/data/", "", $pasta);
            $result .= "<option value=\"$pasta\">$pasta</option>";
         }
      }
   }
   return $result;
}
$pastas = lerpastas($diretorio);
$selectpastas = "<select name=\"pastas\">";
if(is_array($pastas)) {
   $selectpastas .= escreverpastas($pastas);
}
$selectpastas .= "</select>";

$fabricantes = consulta("SELECT * FROM manufacturer");
$fabri = "<select name=\"fabricante\">";
foreach($fabricantes as $fabricante) {
   $fabri .= "<option value=\"".$fabricante['manufacturer_id']."\">".$fabricante['name']."</option>";
}
$fabri .= "</select>";

$categorias = consulta("SELECT *, (SELECT name FROM category_description WHERE `category_description`.`category_id` = `category`.`parent_id`) as categoriapai FROM category, category_description WHERE `category_description`.`category_id` = `category`.`category_id` ORDER BY (SELECT name FROM category_description WHERE `category_description`.`category_id` = `category`.`parent_id`) ASC");
foreach ($categorias as $key => $row) {
   if($row['categoriapai'] == "") {
      $nome[$key] = $row['name'];
   } else {
      $nome[$key] = $row['categoriapai']."/".$row['name'];
   }
}
array_multisort($nome, SORT_ASC, $categorias);
foreach($categorias as $categoria) {
   $cate .= "<div style=\"width:25%; float:left;\"><input type=\"checkbox\" name=\"categorias[]\" value=\"".$categoria['category_id']."\">";
   if($categoria['categoriapai'] != "") {$cate .= $categoria['categoriapai']."/";}
   $cate .= $categoria['name']."</div>";
}

?>
<form method="post">
<table border="1">
<tr>
<td colspan="2">
Nome do Produto
<input type="text" size="70" name="nome" value="" />
</td>
<td>
Modelo do Produto
<input type="text" size="70" name="modelo" value="" />
</td>
<td>
Pre&ccedil;o do Produto
<input type="text" name="preco" value="" />
</td>
</tr>
<tr>
<td colspan="2">
Fabricante
<?php echo $fabri; ?>
</td>
<td colspan="2">
Diret&oacute;rio
<?php echo $selectpastas; ?>
</td>
</tr>
<tr>
<td colspan="4">
Imagens
</td>
</tr>
<tr>
<?php 
for($i = 0; $i < 8; $i++) {
   if ($i == 4) {echo "</tr><tr>";}
   echo "<td><input type=\"text\" name=\"imagens[$i]\" /></td>";
}
?>
</tr>
<tr>
<td colspan="4">
Categorias
</td>
</tr>
<tr>
<td colspan="4">
<?php echo $cate; ?>
</td>
</tr>
<tr>
<td colspan="4">
Descri&ccedil;&atilde;o<br>
<textarea name="descricao" rows="20" cols="140"></textarea>
</td>
</tr>
<tr>
<td>
Peso do Produto
<input type="text" name="peso" value="" />
</td>
<td>
Largura do Produto
<input type="text" name="largura" value="" />
</td>
<td>
Altura do Produto
<input type="text" name="altura" value="" />
</td>
<td>
Comprimento do Produto
<input type="text" name="comprimento" value="" />
</td>
</tr>
<tr>
<td colspan="4">
<input type="submit" value="Enviar" />
</td>
</tr>
</table>
</form>

1 Comentarios:

Postar um comentário