https://www.schoolofnet.com/projeto-pratico/php/php-7/criando-um-site-administravel-com-php/
Neste projeto prático vamos criar um site administrável com PHP com base em um template pré-existente, de forma que possamos incluir novas páginas e gerenciar as existentes de forma prática e eficiente, sem a necessidade de alterar qualquer arquivo, tudo direto no navegador e protegido com usuário e senha.
- Criando um site administrável com PHP
- Índice
- - Testando envio de email
- Introdução
- Definindo um document root
- URLs amigáveis
- Separando URLs amigáveis do site e da administração
- URLs amigáveis dinâmicas
- Criando sistema de template
- Organizando funções
- Manipulando erros
- Configurações da aplicação
- Retornando status code correto
- Adicionando bootstrap 4
- Iniciando template do painel administrativo
- Estilizando o template do painel de administração
- Definindo rotas de administração de páginas
- Template de listagem de páginas
- Template de formulário de cadastro de página
- Inserindo um editor de texto
- Visualização de detalhes de página
- Formulario de edição de página
- Criando funções para integrar com o banco de dados
- Exibindo notificações de ação concluída
- Melhorando as notificações e incluindo confirmações de ação
- Criando banco de dados
- Listando registro
- Cadastrando registro
- Visualização de datalhes de um registro
- Edição de registro
- Remoção de registro
- Criando sessão de usuários
- Template de listagem de usuários
- Finalizando os templates
- Listando dados do banco
- Cadastro de usuários no banco
- Remoção de usuários
- Visualização de dados
- Edição de usuário
- Preparando o upload de imagens
- Barra de progresso de upload
- Finalizando o upload
- Finalizando o painel de administração
- Preparando HTML do login
- Criando login
- Finalizando o login
- Template do site
- Exibindo páginas do site
- Disparando email
- Sobre publicação do projeto
- Enviando os arquivos para o host compartilhado
- Conectando no banco de dados
- Finalizando
- Testando envio de email
- 08-Criando-um-site-administravel-com-PHP/public/index.php
<?php
require __DIR__.'/../bootstrap.php';
- 08-Criando-um-site-administravel-com-PHP/bootstrap.php
<?php
echo "Olá Mundo!";
> php -S localhost:8080 -t public/
PHP 7.2.1 Development Server started at Tue Jan 8 00:23:44 2019
Listening on http://localhost:8080
Document root is C:\Users\josemalcher\Documents\01-SERVs\xampp_php7.2.1\htdocs\schoolOfNet-Iniciante-em-PHP\08-Criando-um-site-administrave
l-com-PHP\public
Press Ctrl-C to quit.
<?php
//!empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/';
$path = $_SERVER['PATH_INFO'] ?? '/';
if ($path == '/'){
require __DIR__.'/site/routes.php';
}else{
echo 'Página não encontrada';
}
<?php
//!empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/';
$path = $_SERVER['PATH_INFO'] ?? '/';
if ($path == '/'){
require __DIR__.'/site/routes.php';
}elseif ($path == '/admin'){
require __DIR__.'/admin/routes.php';
}
else{
echo 'Página não encontrada';
}
- 08-Criando-um-site-administravel-com-PHP/bootstrap.php
<?php
//!empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/';
function resolve($route){
$path = $_SERVER['PATH_INFO'] ?? '/';
$route = '/^' . str_replace('/','\/', $route) . '$/';
if(preg_match($route, $path, $params)){
return $params;
}
return false;
}
if (resolve('/admin/?(.*)')){
require __DIR__.'/admin/routes.php';
}elseif (resolve('/(.*)')){
require __DIR__.'/site/routes.php';
}
- 08-Criando-um-site-administravel-com-PHP/admin/routes.php
<?php
/**
* Created by PhpStorm.
* User: josemalcher
* Date: 16/01/2019
* Time: 20:32
*/
if(resolve('/admin')){
echo 'Administração';
}elseif (resolve('/admin/pages')){
echo 'Página Admin';
}else{
echo 'Página não encontrada';
}
- 08-Criando-um-site-administravel-com-PHP/templates/admin/home.tpl.php
- 08-Criando-um-site-administravel-com-PHP/templates/site/home.tpl.php
- 08-Criando-um-site-administravel-com-PHP/src/resolve-route.php
- 08-Criando-um-site-administravel-com-PHP/src/render.php
- 08-Criando-um-site-administravel-com-PHP/src/connection.php
- 08-Criando-um-site-administravel-com-PHP/src/error_handle.php
- 08-Criando-um-site-administravel-com-PHP/condig.php
http_response_code(500);
http_response_code(404);
- 08-Criando-um-site-administravel-com-PHP/templates/admin.tpl.php
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<title>Painel Administrativo</title>
</head>
<body>
<div id="header">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a href="" class="navbar-brand">JoseMalcher.net</a>
<span class="navbar-text">
Painel Administrativo
</span>
</nav>
</div>
<div id="main">
<div class="row">
<div class="col">
<ul class="nav flex-column nav-pills bg-secondary text-white p-2">
<li class="nav-item">
<span class="nav-link text-white-50"><small>MENU</small></span>
</li>
<li class="nav-item">
<a href="" class="nav-link active">Páginas</a>
</li>
<li class="nav-item">
<a href="" class="nav-link">Usuário</a>
</li>
</ul>
</div>
<div class="col-10">
<?php include $content ?>
</div>
</div>
</div>
<div id="footer"></div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
</body>
</html>
- 08-Criando-um-site-administravel-com-PHP/public/css/style.css
- 08-Criando-um-site-administravel-com-PHP/admin/routes.php
<?php
if(resolve('/admin')){
render('admin/home', 'admin');
}elseif (resolve('/admin/pages')){
render('admin/pages/index', 'admin');
}elseif (resolve('/admin/pages/create')){
render('admin/pages/create', 'admin');
}elseif (resolve('/admin/pages/(\d)+')){
render('admin/pages/view', 'admin');
}elseif (resolve('/admin/pages/(\d)+/edit')){
render('admin/pages/edit', 'admin');
}elseif (resolve('/admin/pages/(\d)+/delete')){
header('location: /admin/pages');
}else{
http_response_code(404);
echo 'Página não encontrada';
}
- templates\admin\pages\index.tpl.php
<h3 class="mb-5">Página Adminitração</h3>
<table class="table table-hover">
<thead>
<tr>
<th>#</th>
<th>Título</th>
<th>Ações</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><a href="/admin/pages/1">Página Inícial</a></td>
<td class="text-right"><a href="/admin/pages/1" class="btn btn-primary btn-sm">Ver</a></td>
</tr>
</tbody>
</table>
<a href="/admin/pages/create" class="btn btn-secondary">NOVO</a>
- templates\admin\pages\create.tpl.php
<h3 class="mb-5">Página Adminitração</h3>
<form action="" method="post">
<div class="form-group">
<label for="pagesTitle">Título</label>
<input type="text" name="title" id="pagesTitle" class="form-control" placeholder="Título da Página...">
</div>
<div class="form-group">
<label for="pagesUrl">URL</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">/</span>
</div>
<input type="text" name="url" id="pagesUrl" class="form-control" placeholder="URL Amigável...">
</div>
</div>
<div class="form-group">
// editor de texto
</div>
<button type="submit" class="btn btn-primary">Salvar</button>
</form>
<hr>
<a href="/admin/pages" class="btn btn-secondary">Voltar</a>
- templates\admin\pages\view.tpl.php
<h3 class="mb-5">Página Adminitração</h3>
<div class="row">
<div class="col-3">
<dl class="row">
<dt class="col-sm-4">Título</dt>
<dd class="col-sm-8">Página inicial</dd>
<dt class="col-sm-4">URL</dt>
<dd class="col-sm-8">/ - <a href="/" target="blank">abrir</a></dd>
<dt class="col-sm-4">Criado em</dt>
<dd class="col-sm-8">2018-02-06 22:30</dd>
<dt class="col-sm-4">Atualizado em</dt>
<dd class="col-sm-8">2018-02-06 23:30</dd>
</dl>
</div>
<div class="col bg-light">
<h3>Página inicial</h3>
<p>Está é a página inicilal do site</p>
</div>
</div>
<p>
<a href="/admin/pages/1/edit" class="btn btn-primary">Editar</a>
<a href="/admin/pages/1/delete" class="btn btn-danger">Remover</a>
</p>
<a href="/admin/pages" class="btn btn-secondary">Admin Páginas</a>
- templates\admin\pages\edit.tpl.php
<h3 class="mb-5">Edição da Página</h3>
<form action="" method="post">
<div class="form-group">
<label for="pagesTitle">Título</label>
<input type="text" name="title" id="pagesTitle" class="form-control" placeholder="Título da Página..." required value="Página inicial">
</div>
<div class="form-group">
<label for="pagesUrl">URL</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">/</span>
</div>
<input type="text" name="url" id="pagesUrl" class="form-control" placeholder="URL Amigável..." required>
</div>
</div>
<div class="form-group">
<input type="hidden" name="body" id="pagesBody" value=" <h3>Página inicial</h3>
<p>Está é a página inicilal do site</p>">
<trix-editor input="pagesBody"></trix-editor>
</div>
<button type="submit" class="btn btn-primary">Salvar</button>
</form>
<hr>
<a href="/admin/pages/1" class="btn btn-secondary">Voltar</a>
- admin\pages\db.php
- admin\pages\routes.php