Posts tagged intermediário

Classe para Breadcrumb: Navegação estrutural

0

Esta é uma classe para Breadcrumb, muito util, entao estou postando aqui,

Breadcrumb: Navegação estrutural (em inglês, breadcrumb navigation, literalmente navegação por migalhas de pão) é uma técnica usada em interfaces de usuário para proporcionar-lhes um meio de localização dentro da estrutura de programas ou documentos.

Por exemplo, um site web usando a navegação estrutral traria, normalmente no alto da página, um caminho assim

Portal > Seção > Sub-seção

muito simples de usar. Ela utiliza session para gravar o caminho.

a classe:

<?php
class Breadcrumb{
/*
* Breadcrumb navigation class
* Mick Sear
* http://www.ecreate.co.uk
*
* The key to using this is to decide on a $level for each page. (array, starting position 0)
* This determines where in the trail a link will be placed. So, I normally make the homepage level 0,
* then every page that can be accessed from the top level nav becomes level 1, and every page
* from that second level becomes level 2, and so on. When users return to a higher level (e.g. level 1)
* the surplus links are removed. Only one page can occupy a $level in the crumb trail.
* There might be several routes to a page. In which case, the trail will reflect the route that the
* user actually took to get to that page.
*/

 var $output;
 var $crumbs = array();
 var $location;

 /*
        * Constructor
        */
 function Breadcrumb(){

 if (!isset($_SESSION)) session_start();

        if (isset($_SESSION['breadcrumb']) && $_SESSION['breadcrumb'] != NULL){
        $this->crumbs = $_SESSION['breadcrumb'];
        }

 }

 /*
        * Add a crumb to the trail:
        * @param $label - The string to display
        * @param $url - The url underlying the label
        * @param $level - The level of this link.
        *
        */
 function add($label, $url, $level){

        $crumb = array();
        $crumb['label'] = $label;
        $crumb['url'] = $url;

        if ($crumb['label'] != NULL && $crumb['url'] != NULL && isset($level)){        

        while(count($this->crumbs) > $level){

        array_pop($this->crumbs); //prune until we reach the $level we've allocated to this page

        }

        if (!isset($this->crumbs[0]) && $level > 0){ //If there's no session data yet, assume a homepage link

        $this->crumbs[0]['url'] = "/index.php";
        $this->crumbs[0]['label'] = "Home";

        }

        $this->crumbs[$level] = $crumb;

        }

        $_SESSION['breadcrumb'] = $this->crumbs; //Persist the data
        $this->crumbs[$level]['url'] = NULL; //Ditch the underlying url for the current page.
 }

 /*
        * Output a semantic list of links. See above for sample CSS. Modify this to suit your design.
        */
 function output(){

        //echo "<div id='breadcrumb'><ul><li>Click trail: </li>";
         echo '>';
        foreach ($this->crumbs as $crumb){

        if ($crumb['url'] != NULL){

        //echo "<li> > <a href='".$crumb['url']."' title='".$crumb['label']."'>".$crumb['label']."</a></li> ";
                        echo " > <a href='".$crumb['url']."' title='".$crumb['label']."'>".$crumb['label']."</a>";

        } else {

        echo " > ".$crumb['label'];

        }
        }

        //echo "</ul></div>";
 }
}
?>

para utiliza-lá é bem simples:

<?php
require "breadcrumb.php"; //supondo que voce tenha salvo o codigo em outro arquivo
$trail = new Breadcrumb(); // instancia a classe
$trail->add('Pagina', $_SERVER['PHP_SELF'], 0); //os codigos do crumb
$trail->output(); //a saida
?>

para configura-la basta colocar o nome da sua pagina na onde esta escrito ‘Pagina’, e onde tem o numero 0 (zero), voce coloca o nivel da pagina

Exemplo:

supondo que você esteja na home.php

<?php
require "breadcrumb.php";
$trail = new Breadcrumb();
$trail->add('Home', $_SERVER['PHP_SELF'], 0);
$trail->output();
?>

vai aparecer

>> Home

na segunda pagina voce colcocaria assim:

 <?php
 require "breadcrumb.php";
 $trail = new Breadcrumb();
 $trail->add('2a Pagina', $_SERVER['PHP_SELF'], 1); //foi trocado de 0 para 1
 $trail->output();
 ?>

vai aparecer

>> Home > 2a Pagina

Obs: essa classe não pega o caminho que esta na barra de endereços do navegador. Ela segue uma sequencia criada pelo programador e salva em session.

espero que seja útil.

retirado de

http://www.roscripts…crumbs-118.html

Gerar arquivo XLS (excel) sem utilizar classes

1

Um escript bem simples para gerar arquivo XLS (excel) sem utilizar classes

Gerar o XLS

<?php
//inclui a conexao com o banco
include("conexao.php");

// Procurar as informações do BD
$SQL = "SELECT * FROM cadastros" ;
$executa = mysql_query($SQL);

// Escolher o formato do arquivo
header("Content-type: application/msexcel");

// Nome que arquivo será salvo
header("Content-Disposition: attachment; filename=minha_tabela.xls");

// Criar a tabela para receber os dados
echo "<table>";
 echo "<tr>";
        echo "<td></td>";
        echo "<td>Data</td>";
        echo "<td>Nome</td>";
        echo "<td>E-mail</td>";
        echo "<td>Telefone</td>";
 echo "</tr>";
$x=1;
while ($r = mysql_fetch_array($executa)){
 echo "<tr>";
        echo "<td>".$x."</td>";
        echo "<td>" . $r["data"] . "</td>";
        echo "<td>" . $r["nome"] . "</td>";
        echo "<td>" . $r["email"] . "</td>";
        echo "<td>" . $r["telefone"] . "</td>";
 echo "</tr>";
 $x++;
}
echo "</table>";
?>

conexao.php

<?php
/*Conexão com o BD*/
$host = "localhost"; //endereço do servidor
$login = "root"; //login
$senha = ""; //senha
$banco = "xls"; //nome do banco
$conexao = mysql_connect($host, $login, $senha) or die (mysql_error());
mysql_select_db($banco);
?>

Espero que tenha sido útil.

Apagar arquivos de um diretório e o diretório

0

Pessoal

Depois de um tempo sem postar estou de volta ao PHP com mais funções e scripts úteis.  Esta apaga arquivos de dentro de um diretório e depois apaga o diretório.

<?php
function limparDiretorios($caminhoParaDiretorio) {
        // definindo um array para exibir os erros
        $erros = array ();
        // definindo o objeto que faz a iteração do diretório
        $diretorio = new RecursiveDirectoryIterator ( $caminhoParaDiretorio );
        // definindo o objeto que fará a iteração recursiva
        $arquivos = new RecursiveIteratorIterator ( $diretorio, RecursiveIteratorIterator::CHILD_FIRST );
        // iterando o objeto
        foreach ( $arquivos as $arquivo ) {
                // verificando permissão, ou seja, se o arquivo pode ser modificado
                if ($arquivo->isWritable ()) {
                        // verificamos se a iteração atual é de um diretório
                        if ($arquivo->isDir ()) {
                                // se for, utilizamos rmdir para excluir
                                rmdir ( $arquivo->getPathname );
                                // senão, testamos se é um arquivo
                        } elseif ($arquivo->isFile ()) {
                                // para arquivos, utilizamos o unlink
                                unlink ( $arquivo->getPathname );
                        }
                        // caso o arquivo não possa ser modificado, gravamos na variável o nome do arquivo e a permissão do arquivo
                } else {
                        $erros [] = 'O arquivo ' . $arquivo->getPathname . ' tem permissões ' . $arquivo->getPerms () . ' e não pode ser excluído.';
                }
        }
        // caso existam erros, mostramos, ou exibimos mensagem de sucesso.
        if (count ( $erros )) {
                return implode ( '<br />', $erros );
        } else {
                return 'Arquivos excluídos com sucesso.';
        }
}
echo limparDiretorios( 'caminho/para/o/diretorio' );

O grande detalhe, que me fez perder um tempão, foi aqui:

$arquivos = new RecursiveIteratorIterator ( $diretorio, RecursiveIteratorIterator::CHILD_FIRST );

Ao utilizar o segundo parâmetro com o CHILD_FIRST, o diretório só será iterado após todos os seus arquivos serem iterados e apagados.

Abraços e até mais.

PHP e MySQL: sistema de paginação

0

A principal característica desse sistema é a facilidade de implementação em sua página.
Você precisa apenas definir as variáveis de quantidade de registros por página e o número de botões que serão exibidos para a paginação. Por exemplo: Caso defina este número em 3, será exibido 3 links antes e 3 links depois da página atual.
Se você estiver na página 5, será exibido assim:

<- Anterior | Próxima ->

Abaixo segue o código todo comentado:

<?php
$conn = mysql_connect("localhost","root","vertrigo");
$banco = mysql_select_db("a94964_boletim");

$busca = "SELECT * FROM alunos";

$total_reg = "10"; // número de registros por página

if (!$pagina) {
 $pc = "1";
} else {
 $pc = $pagina;
}

$inicio = $pc - 1;
$inicio = $inicio * $total_reg;

$limite = mysql_query("$busca LIMIT $inicio,$total_reg");
$todos = mysql_query("$busca");

$tr = mysql_num_rows($todos); // verifica o número total de registros
$tp = $tr / $total_reg; // verifica o número total de páginas

// vamos criar a visualização
while ($dados = mysql_fetch_array($limite)) {
 $nome = $dados["aluno"];
 echo "$nome<br>";
}

// agora vamos criar os botões "Anterior e próximo"
$anterior = $pc -1;
$proximo = $pc +1;
if ($pc>1) {
 echo " <a href='?pagina=$anterior'><- Anterior</a> ";
}
echo "|";
if ($pc<$tp) {
 echo " <a href='?pagina=$proximo'>Próxima -></a>";
}
?>

Espero que tenham gostado.

Abraços a todos!

Go to Top