Sites Dinâmicos

Sites dinâmicos são sites gerenciáveis por sistemas de CMS (Content Management System), através de uma plataforma online, que é acessada por login e senha, é possível manipular todo o conteúdo gerenciável do Mais »

Modelagem 3D

Se sua empresa precisa de ilustrações em 3D, venha falar com a Toca Digital e conheça o nosso trabalho. A modelagem 3D (modelagem tridimensional)  é o processo de desenvolvimento de uma representação Mais »

Ganhe tempo na construção de seu site

  Não perca seu tempo com empresas que vão deixar você na mão, montamos seu site com os melhores recursos da internet, ferramentas de gereciamento de conteúdo e de controle estatístico. Com Mais »

 

Classe simples de conexão em PDO utilizando Orientação a Objeto

Para conectar no banco, crie este arquivo:

ConexaoDatabase.php


<?php

class ConexaoDatabase {

 private static $servidor = 'localhost'; // Servidor, no caso poderia ser também localhost
 private static $usuario = 'root'; // usuário do banco de dados
 private static $senha = ''; // senha do banco de dados
 private static $banco = 'noticias'; // nome do banco de dados
 private static $instance = null;
 public static function getConnection() {
 if (!self::$instance instanceof PDO) {
 try {
self::$instance = new PDO('mysql:host=' . self::$servidor . ';dbname=' . self::$banco, self::$usuario, self::$senha, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
 } catch (PDOException $exc) {
 echo "Erro ao conectar :: {$exc->getMessage()}";
 }
 }
 return self::$instance;
 }
 public function fetchAll($query) {
 $con = self::getConnection();

$stmt = $con->prepare($query);

$this->execute($stmt);

if ($stmt->rowCount()) {
 return $stmt->fetchAll(PDO::FETCH_OBJ);
 } else {
 return false;
 }
 }

public function fetch($query) {
 $con = self::getConnection();

$stmt = $con->prepare($query);

$this->execute($stmt);

if ($stmt->rowCount()) {
 return $stmt->fetch(PDO::FETCH_OBJ);
 } else {
 return false;
 }
 }

public function execute(PDOStatement $stmt, array $data = null) {
 try {
 if (isset($data)) {
 $stmt->execute($data);
 } else {
 $stmt->execute();
 }
 } catch (PDOException $exc) {
    echo $exc->getTraceAsString();
    var_dump($exc->getMessage());
 }
 }
 /** UPDATE OR INSERT DATA

 **/
 public function save($sql, array $data) {

 $con = self::getConnection();

 $stmt = $con->prepare($sql);

 $this->execute($stmt, $data);

if($stmt->rowCount()) {
 return true;
 }else{
 return false;
 }
 }

}

?>

Agora vamos criar uma tabela simples de notícias, para isso execute a seguinte query no seu mysql:

/** cria o banco **/
CREATE DATABASE noticias;
/** cria a tabela **/
CREATE TABLE `tab_noticias` (
`id_noticia` int(11) NOT NULL AUTO_INCREMENT,
`permissao` tinyint(2) NOT NULL,
`titulo` varchar(300) DEFAULT NULL,
`texto` longtext,
`data_publicacao` datetime DEFAULT NULL,
PRIMARY KEY (`id_noticia`))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

/** inserindo dados na tabela **/

INSERT INTO `tab_noticias` VALUES(null,1,'Notícia exemplo 1','<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sapien nisl, elementum rutrum ex sit amet, facilisis luctus felis. Proin lobortis odio non facilisis blandit. Vivamus mollis facilisis quam sed eleifend. Sed quis nunc elit. Ut accumsan sit amet lorem nec gravida. Sed non cursus dui. Sed feugiat ultricies luctus. Quisque vitae mi cursus, convallis orci quis, aliquam purus. Nullam non massa id ex pretium dapibus non vitae erat. Sed aliquam ex dignissim, aliquet leo quis, tincidunt libero. In ac euismod massa. Nam quis sem eget libero interdum ultricies at a lacus.</p><p>Proin est tortor, feugiat at magna ac, tempus faucibus nunc. Aliquam quis orci a metus ultricies fringilla id vitae nunc. Curabitur nunc urna, suscipit et odio a, rhoncus rutrum nibh. Vestibulum ipsum erat, tempus nec semper non, feugiat eget sem. Ut vestibulum libero ipsum, a accumsan leo tristique et. Vestibulum nulla nisi, tincidunt vitae nisl sed, vulputate molestie urna. Pellentesque facilisis risus at pharetra elementum. Nullam elementum erat nulla, id commodo nisi euismod sed. Aenean quis ipsum vestibulum, vestibulum lectus eu, sagittis sapien. Vestibulum vel semper enim, nec malesuada lectus. Fusce feugiat nisl ac lacus convallis commodo. Donec sit amet turpis turpis. Ut rhoncus elit leo, in pharetra est molestie non. Donec semper, felis vitae luctus pretium, lectus erat venenatis elit, eget condimentum est mauris eu quam. Vivamus sit amet odio ut dui vulputate euismod in vel sapien.</p><p>Sed mattis lacus lacus, sed egestas ex condimentum eu. Aliquam id mollis magna. Duis accumsan ligula in enim semper suscipit. Vestibulum at mauris eu orci ultrices porttitor id quis nunc. Etiam id nisl porta, suscipit diam sed, rutrum augue. Nunc consectetur augue quis arcu euismod volutpat. Nulla convallis mi dui, in sollicitudin augue tincidunt id. Nulla erat justo, congue sit amet lectus eget, blandit elementum mauris. Nullam euismod non metus non consequat. Aenean non purus mollis, molestie felis id, ullamcorper arcu. Donec mattis diam sit amet tincidunt aliquet.</p>',now());

INSERT INTO `tab_noticias` VALUES(null,1,'Notícia exemplo 2','<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sapien nisl, elementum rutrum ex sit amet, facilisis luctus felis. Proin lobortis odio non facilisis blandit. Vivamus mollis facilisis quam sed eleifend. Sed quis nunc elit. Ut accumsan sit amet lorem nec gravida. Sed non cursus dui. Sed feugiat ultricies luctus. Quisque vitae mi cursus, convallis orci quis, aliquam purus. Nullam non massa id ex pretium dapibus non vitae erat. Sed aliquam ex dignissim, aliquet leo quis, tincidunt libero. In ac euismod massa. Nam quis sem eget libero interdum ultricies at a lacus.</p><p>Proin est tortor, feugiat at magna ac, tempus faucibus nunc. Aliquam quis orci a metus ultricies fringilla id vitae nunc. Curabitur nunc urna, suscipit et odio a, rhoncus rutrum nibh. Vestibulum ipsum erat, tempus nec semper non, feugiat eget sem. Ut vestibulum libero ipsum, a accumsan leo tristique et. Vestibulum nulla nisi, tincidunt vitae nisl sed, vulputate molestie urna. Pellentesque facilisis risus at pharetra elementum. Nullam elementum erat nulla, id commodo nisi euismod sed. Aenean quis ipsum vestibulum, vestibulum lectus eu, sagittis sapien. Vestibulum vel semper enim, nec malesuada lectus. Fusce feugiat nisl ac lacus convallis commodo. Donec sit amet turpis turpis. Ut rhoncus elit leo, in pharetra est molestie non. Donec semper, felis vitae luctus pretium, lectus erat venenatis elit, eget condimentum est mauris eu quam. Vivamus sit amet odio ut dui vulputate euismod in vel sapien.</p><p>Sed mattis lacus lacus, sed egestas ex condimentum eu. Aliquam id mollis magna. Duis accumsan ligula in enim semper suscipit. Vestibulum at mauris eu orci ultrices porttitor id quis nunc. Etiam id nisl porta, suscipit diam sed, rutrum augue. Nunc consectetur augue quis arcu euismod volutpat. Nulla convallis mi dui, in sollicitudin augue tincidunt id. Nulla erat justo, congue sit amet lectus eget, blandit elementum mauris. Nullam euismod non metus non consequat. Aenean non purus mollis, molestie felis id, ullamcorper arcu. Donec mattis diam sit amet tincidunt aliquet.</p>',now());
INSERT INTO `tab_noticias` VALUES(null,1,'Notícia exemplo 3','<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sapien nisl, elementum rutrum ex sit amet, facilisis luctus felis. Proin lobortis odio non facilisis blandit. Vivamus mollis facilisis quam sed eleifend. Sed quis nunc elit. Ut accumsan sit amet lorem nec gravida. Sed non cursus dui. Sed feugiat ultricies luctus. Quisque vitae mi cursus, convallis orci quis, aliquam purus. Nullam non massa id ex pretium dapibus non vitae erat. Sed aliquam ex dignissim, aliquet leo quis, tincidunt libero. In ac euismod massa. Nam quis sem eget libero interdum ultricies at a lacus.</p><p>Proin est tortor, feugiat at magna ac, tempus faucibus nunc. Aliquam quis orci a metus ultricies fringilla id vitae nunc. Curabitur nunc urna, suscipit et odio a, rhoncus rutrum nibh. Vestibulum ipsum erat, tempus nec semper non, feugiat eget sem. Ut vestibulum libero ipsum, a accumsan leo tristique et. Vestibulum nulla nisi, tincidunt vitae nisl sed, vulputate molestie urna. Pellentesque facilisis risus at pharetra elementum. Nullam elementum erat nulla, id commodo nisi euismod sed. Aenean quis ipsum vestibulum, vestibulum lectus eu, sagittis sapien. Vestibulum vel semper enim, nec malesuada lectus. Fusce feugiat nisl ac lacus convallis commodo. Donec sit amet turpis turpis. Ut rhoncus elit leo, in pharetra est molestie non. Donec semper, felis vitae luctus pretium, lectus erat venenatis elit, eget condimentum est mauris eu quam. Vivamus sit amet odio ut dui vulputate euismod in vel sapien.</p><p>Sed mattis lacus lacus, sed egestas ex condimentum eu. Aliquam id mollis magna. Duis accumsan ligula in enim semper suscipit. Vestibulum at mauris eu orci ultrices porttitor id quis nunc. Etiam id nisl porta, suscipit diam sed, rutrum augue. Nunc consectetur augue quis arcu euismod volutpat. Nulla convallis mi dui, in sollicitudin augue tincidunt id. Nulla erat justo, congue sit amet lectus eget, blandit elementum mauris. Nullam euismod non metus non consequat. Aenean non purus mollis, molestie felis id, ullamcorper arcu. Donec mattis diam sit amet tincidunt aliquet.</p>',now());

Após criar a tabela e inserir os dados, vamos fazer a consulta, para isso iremos criar outro arquivo chamado:

noticias.php

<?php
require_once('ConexaoDatabase.php');

class Noticias {

private $conexao;

public function listarNoticias() {
$sql = "SELECT id_noticia, titulo, texto, DATE_FORMAT(data_publicacao,'%d/%m/%Y') as  data_publicacao FROM tab_noticias WHERE permissao=1 ORDER BY data_publicacao DESC, id_noticia DESC";
$this->conexao = new ConexaoDatabase();
$noticias = $this->conexao->fetchAll($sql);
return  $noticias;

}

public function abrirNoticia($id = 0) {
$sql = "SELECT id_noticia, titulo, texto, DATE_FORMAT(data_publicacao,'%d/%m/%Y') as  data_publicacao FROM tab_noticias WHERE permissao=1 AND id_noticia=$id ORDER BY data_publicacao DESC, id_noticia DESC";
$this->conexao = new ConexaoDatabase();
$noticia = $this->conexao->fetch($sql);
return  $noticia;

}
}

$objNoticias = new Noticias();

$collectionNoticias = $objNoticias->listarNoticias();

if (!isset($_GET['id'])) {
if( !empty($collectionNoticias )) {
foreach($collectionNoticias  as $noticia) {
echo "<a href=\"?id=".$noticia->id_noticia."\">".$noticia->titulo."</a><br>";
}
}
} else {

$id = $_GET['id'];
$aNoticia = $objNoticias->abrirNoticia($id);

echo "<h1>".$aNoticia->titulo."</h1>";
echo "<small>".$aNoticia->data_publicacao."</small>";
echo "<div class=\"texto\">".$aNoticia->texto."</div>";
echo "<div class=\"back\" style=\"display:block;\">".
     "<a href=\"javascript:void(0);\" onclick=\"history.back(1);\"><< VOLTAR</a></div>";

}
?>

Vamos Falar sobre Zend Framework

Quando comecei a programar, isso já há uns 10 anos. Utilizava a linguagem do PHP 4.0, nessa época mal se falava em Frameworks, apesar de já terem o Zend desde 2005 e algumas comunidades a respeito, não era muito divulgado, então acabei chegando tarde a seu conhecimento, também não corri muito atrás na época, pois eu estava inventando a roda ainda… Com o tempo descobrimos o que é reaproveitamento de código, e aí ficamos “cada vez mais preguiços”, quero dizer, criamos mais códigos e trabalhamos até mais para no final trabalharmos menos, ou para melhorar o suporte de nossos sistemas, não que isso seja uma regra absoluta, mas tem diversas vantagens… Pois bem, burocratizamos tudo, se é que me entendem.

O Zend Framework se tornou uma ferramenta que permite criar um sistema com um longo período de prospecção mas que tem um resultado final muito satisfatório, além da facilidade tremenda de manutenção e modularidade, há uma eficiência de reutilização de códigos, fora de série. Fora as diversas outras possibilidades infinitas e inimagináveis que sua mente precisará descobrir afundando-se em seu estudo mais complexo e profundo entre cafés e energéticos durante a madrugada…

O que posso dizer é que o Zend Framework 2 (ZF2) possibilita fazer sistemas complexos seguros e eficientes, para empresas a longo prazo (a questão de prazo se deve considerar também quanto se tem progredido com o produto final do seu sistema), enquanto o Zend Framework 1.12, permite criar sites simples em pouco tempo, com prospecção independente de reaproveitamento.

Ambos tem suas vantagens e desvantagens.

Mas se vc começar a trabalhar com o ZF2, não vai mais querer voltar para o 1.12. “Perde se tempo no começo e ganha se tempo no futuro”.

O mais trabalhoso do ZF2 eu diria que é configurar as rotas, a integração do composer com o doctrine, e saber fazer o mapeamento do banco, o resto, é igual a qualquer outro framework. Mas a vantagem dele é que ele segue um padrão de projeto vale a pena ver aqui: www.php-fig.org

Para começar a instalar o ZendFramwork 2, vc irá precisa do ZendSkeleton, que é nada mais e nada menos que o esqueleto padrão do projeto: http://framework.zend.com/manual/2.0/en/user-guide/skeleton-application.html
e do composer: https://getcomposer.org/

Além disso o Zend Framework 2 conta com uma biblioteca cheia de recursos para você trabalhar, como paginação, indexação e pesquisa como Zend Lucene, etc. Você também pode adquirir complementos para expandir essa biblioteca instalando-os através do composer.

No próprio site do composer tem o caminho, mas eu vou facilitar, colocando ele aqui: https://packagist.org/, esse endereço vc consegue busca ferramentas para ampliar a Library do Zend.

Se você não tem ideia de como começar a instalar o Zend, vc pode assistir a essa vídeo aula grátis:
https://www.youtube.com/channel/UCsMR_iixPPlYl6QysW3kkyQ

Além disso, ele funciona basicamente assim:

Começa assim:
/config (nesta pasta fica as configurações padrões do doctrine, banco, e ativação dos modulos) que continua dentro da pasta /autoload que contém o autoload das classes, que se orientam pela declaração de “namespace” (requer no mínimo php 5.3 ou superior, recomendo 5.5, ZF1.12 utilizava o underline “_” para criar essa orientação de pastas, já com o namespace, essa prática se tornou obsoleta) para o mapeamento das classes, métodos etc.

Exemplo de configuração do banco:


/data/ são arquivos para download, armazenamento, etc.
/module/ (pasta onde ficam os módulos, os mini sistemas que irão em conjunto fazer a sua ferramenta ter o pacote de soluções modulares), dentro desta pasta vem a subpasta do modulo (no caso Album que seria um Application), e o arquivo de configuração do módulo: /module/Album/config/module.config.php ( é basicamente onde vc coloca as rotas do sistema e o mapeamento das views )
/module/Album/src/ (nesta pasta encontram-se a camada MVC do modulo)
/module/Album/src/Album/Controller/ (como o próprio nome diz, o controle, que faz basicamente o comando de chamar os modelos, que por sua vez estarão /module/Album/src/Album/Model/, que eu não acrescentei na imagem acima, mas eles estarão aí.
O arquivo Module.php é onde você mapeará o serviços que irão ser executados junto com sua aplicação.

Os serviços, estarão em uma pasta assim:
/module/Album/src/Model/Services/Service/Album.php

É nele que vc cria suas chamadas do banco e processos que deverão obter um comportamento através do repositório do seu modelo, que no caso poderia ser  uma consulta através da entidade do banco que foi mapeada, relacionando e obtendo heranças de métodos de outras entidades relacionais.

E neste caso seu modelo de entidade, ficará em uma outra pasta chamada:
/module/Album/src/Model/Entities/Entity/Album.php

E como disse, também tem essa outra camada chamada repositório que seria basicamente assim, que é o modelo propriamente dito:
/module/Album/src/Model/Repositories/Repository/Album.php

Esta camada é responsável por criar a mágica, a regra do negócio por assim dizer, neste arquivo vc faz a chamada dos serviços, faz a coleção e depois envia para a view.
a view ficará na pasta:
/module/Album/src/view/album/album-view.phtml
Lembrando que ela será mapeada no (/module/Album/config/module.config.php), como já havia dito.
Você também pode criar nesta pasta uma pasta chamada  /module/Album/src/view/album/partials/menu.phtml
e criar arquivos que funcionam como includes.

E também pode criar um layout padrão para que tenha sempre o mesmo cabeçalho e mesmo rodapé em todas as suas views desse módulo:
/module/Album/src/view/album/layout/layout.phtml

Para concluir a chamada do site começa numa pasta pública através do arquivo index.php, que é justamente onde vc disponibilizará tudo que for público, como imagens, css, javascripts, jquery, angularjs, etc…

/public/index.php
/public/css/style.css
/public/js/script.js
/public/lib/…
/public/core/…
/public/img/fig.jpg

etc…

E por fim tem a pasta /vendor/ que é onde estará o framework propriamente dito, nesta pasta você nem precisará mexer, a menos que saiba o que está fazendo.

Acredito que essas informações básicas já podem te dar um pontapé inicial para você começar a entender melhor e poder trabalhar com esse Framework poderoso.
E para tirar suas dúvidas, tem toda uma documentação acessível através desse site:

http://framework.zend.com/manual/2.0/en/index.html

Espero ter ajudado!

Switch to our mobile site