Niezalogowany (
Zaloguj się
)
Szablony PHP
Kategorie
Dyskusje
Szukaj
Kategorie
Pomoc
Dyskusje ogólne
Newsroom
PHP jako system szablonów
Smarty
PHPTAL
Savant
Open Power Template
SimpleT
Fast Template
PEAR::HTML_Template_Flexy
PEAR::HTML_Template_IT
PEAR::HTML_Template_PHPLIB
PEAR::HTML_Template_Sigma
PEAR::HTML_Template_Xipe
System szablonów phpBB
XSLT
Inne systemy szablonów
Własny system szablonów
Który system szablonów lepszy?
Tylko nie szablony!
PHP
Off topic
Feeds
Atom
RSS2
Vanilla 1.0.3
jest produktem
Lussumo
. Więcej informacji:
Dokumentacja
,
Forum
.
PHPTAL
: Lista linków użytych w szablonie w widoku do wydruku
W dół
Od 1 do 1 z 1
CommentAuthor
admirau
CommentTime
Dec 27th 2006
Ten przykład demonstruje użycie filtra typu "post", czyli nakładanego na szablon po kompilacji
Generuje listę linków użytych na stronie, przydatną przy drukowaniu strony.
config.phptal.php
<code lang="php">
<?php
/* Konfiguracja PHPTAL */
// katalog z szablonami
define('PHPTAL_TEMPLATE_REPOSITORY', SITE_PATH.'_tpl/');
// katalog dla szablonów skompilowanych
// uwaga: katalog musi mieć prawa do zapisu!
define('PHPTAL_PHP_CODE_DESTINATION', SITE_PATH.'_compile/');
// wymuś kompilację za każdym razem
define('PHPTAL_FORCE_REPARSE', 1);
// ścieżka do katalogu w którym zainstalowane jest PHPTAL
ini_set('include_path', ini_get('include_path') . ':' . SITE_PATH . '_lib/');
require_once 'PHPTAL.php';
/* Koniec konfiguracji PHPTAL */
class PHPTALx extends PHPTAL
{
public function DisplayTemplate($links=true){
// wyświetlenie szablonu i ewentualne przechwycenie błędu
// dorobić: info mailem do admina w razie draki
try {
if($links) $this->setPostFilter(new printLinks());
echo $this->execute();
}
catch (Exception $e){
echo '<pre>';
echo $e;
echo '</pre>';
}
}
}
</code>
<code lang="php">
/**
* Zawartość pliku PHPTAL/filter.php
*
*/
interface PHPTAL_Filter
{
public function filter($str);
}
/**
* Filtr dodający listę linków do strony
*
*/
class printLinks implements PHPTAL_Filter {
public function filter($xhtml){
$link_count=1;
$this->_link_list = '';
$xhtml = preg_replace('/<a[^>]*href="([^"]+)"[^>]*>(.+?)<\/a>/ie', '$this->_build_link_list($link_count++, "\\1", "\\2", "\\0")', $xhtml);
//$this->printlinks = $this->_link_list;
$xhtml = preg_replace('@<div id="printlinks"><\/div>@i', $this->_link_list, $xhtml);
return $xhtml;
}
function _build_link_list($link_count, $link, $display, $a)
{
if ( substr($link, 0, 7) == 'http://' || substr($link, 0, 8) == 'https://' ||
substr($link, 0, 7) == 'mailto:' ) {
$this->_link_list .= "[$link_count] $link<br />\r\n";
} else {
$this->_link_list .= "[$link_count] " . $this->url;
if ( substr($link, 0, 1) != '/' ) {
$this->_link_list .= '/';
}
$this->_link_list .= "$link<br />\r\n";
}
return $a . '<sup class="printlinks">[' . $link_count . ']</sup>';
}
}
?>
</code>
sposób użycia:
--
plik: index.php
<code lang="php">
<?php
require ('config.phptal.php');
// nowy szablon
$tpl=new PHPTALx('test_filter.html');
// wyświetlenie szablonu
$tpl->DisplayTemplate();
?>
szablon
plik: test_filter.html
<code>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>TAAT Technologie Cyfrowe</title>
<meta name="author" content="TAAT Technologie Cyfrowe" />
<link rel="stylesheet" type="text/css" media="screen,projection,handheld" href="screen.css" />
<link rel="stylesheet" type="text/css" media="print" href="print.css" />
</head>
<body>
<h1>test 1</h1>
<h2>cośtam</h2>
<p>paragraf
<ul>
<li>cośtam2</li>
<li><a href="http://link1" class="fdsf">link1 tekst</a></li>
<li><a href="http://link2a" class="fdsf">link2a tekst</a></li>
<li><a href="http://link3" class="fdsf">link3 tekst</a></li>
<li><a href="http://link4" class="fdsf">link4 tekst</a></li>
<li><a href="http://link5b" class="fdsf">link5b tekst</a></li>
</ul>
</p>
<div class="printlinks">
<h2>Linki na tej stronie:</h2>
<div id="printlinks"></div>
</div>
</body>
</html>
</code>
wynik
źródło html:
<code>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>TAAT Technologie Cyfrowe</title>
<meta name="author" content="TAAT Technologie Cyfrowe"/>
<link rel="stylesheet" type="text/css" media="screen,projection,handheld" href="screen.css"/>
<link rel="stylesheet" type="text/css" media="print" href="print.css"/>
</head>
<body>
<h1>test 1</h1>
<h2>cośtam</h2>
<p>paragraf
<ul>
<li>cośtam2</li>
<li><a href="http://link1" class="fdsf">link1 tekst</a><sup class="printlinks">[1]</sup></li>
<li><a href="http://link2a" class="fdsf">link2a tekst</a><sup class="printlinks">[2]</sup></li>
<li><a href="http://link3" class="fdsf">link3 tekst</a><sup class="printlinks">[3]</sup></li>
<li><a href="http://link4" class="fdsf">link4 tekst</a><sup class="printlinks">[4]</sup></li>
<li><a href="http://link5b" class="fdsf">link5b tekst</a><sup class="printlinks">[5]</sup></li>
</ul>
</p>
<div class="printlinks">
<h2>Linki na tej stronie:</h2>
[1] http://link1<br />
[2] http://link2a<br />
[3] http://link3<br />
[4] http://link4<br />
[5] http://link5b<br />
</div>
</body>
</html>
</code>
w kodzie html wykorzystywana jest klasa CSS .printlinks
która dla normalnego wyświetlania (media screen) wygląda tak:
<code lang="css">
.printlinks {
display: none;
}
</code>
czyli, elementy są ukryte,
a dla wydruku (media print):
<code lang="css">
.printlinks {
display: inline;
}
</code>
Sposób działania
Klasa filtruje szablon po komplilacji w poszukiwaniu linków.
za każdym linkiem dodaje [nr],
a w miejscu gdzie napotka ciąg znaków:
<div id="printlinks"></div>
wstawia listę linków
W skrócie
1. Includujesz plik config.phptal.php, zawierający filtr
2. W szablonie, w miejscu w którym ma się pojawić lista linków wstawiasz:
<div id="printlinks"></div>
I to wszystko ;)
Od 1 do 1 z 1