delete unneeded

This commit is contained in:
Uwe Tews
2014-10-31 00:52:20 +01:00
parent 2172df777a
commit 9e6dddeee4
1987 changed files with 0 additions and 317752 deletions

View File

@@ -1,11 +0,0 @@
configure
Makefile
manual.xml
config.*
*.cache
*.fot
html
phpweb
diff
revcheck.html
manual.pdf

View File

@@ -1,75 +0,0 @@
# +----------------------------------------------------------------------+
# | PHP Version 5 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997-2004 The PHP Group |
# +----------------------------------------------------------------------+
# | This source file is subject to version 3.0 of the PHP license, |
# | that is bundled with this package in the file LICENSE, and is |
# | available through the world-wide-web at the following url: |
# | http://www.php.net/license/3_0.txt. |
# | If you did not receive a copy of the PHP license and are unable to |
# | obtain it through the world-wide-web, please send a note to |
# | license@php.net so we can mail you a copy immediately. |
# +----------------------------------------------------------------------+
#
#
# $Id$
#
all: html
# {{{ variables
PHP=@PHP@
LANG=@LANG@
NSGMLS=@SP_OPTIONS@ @NSGMLS@
JADE=@SP_OPTIONS@ @JADE@ -D . -wno-idref
XMLLINT=@XMLLINT@
FOP=@FOP@
XMLDCL=./dtds/dbxml-4.1.2/phpdocxml.dcl
CATALOG=@CATALOG@
HTML_STYLESHEET=dsssl/html.dsl
PHPWEB_STYLESHEET=dsssl/php.dsl
# }}}
#default behaviour
all:html
FORCE:
html: FORCE
@test -d html || mkdir html
$(JADE) $(CATALOG) -d $(HTML_STYLESHEET) -V use-output-dir -t sgml $(XMLDCL) manual.xml
$(PHP) scripts/html_syntax.php html html/
web: FORCE
@test -d phpweb || mkdir phpweb
$(JADE) $(CATALOG) -d $(PHPWEB_STYLESHEET) -V use-output-dir -t sgml $(XMLDCL) manual.xml
$(PHP) scripts/generate_web.php
$(PHP) scripts/html_syntax.php php phpweb/
pdf: FORCE
${FOP} -xml manual.xml -xsl xsl/fo.xsl -pdf manual.pdf
chm: html FORCE
chm/make_chm.bat $(LANG)
test:
$(NSGMLS) -i lang-$(LANG) -s $(XMLDCL) manual.xml
test_xml:
$(XMLLINT) --noent --noout --valid manual.xml
revcheck: FORCE
$(PHP) -f scripts/revcheck.php $(LANG) > revcheck.html
# {{{ cleanup
clean:
rm -f Makefile config.* manual.xml configure entities/version.ent *.fot dsssl/html-common.dsl manual.pdf
rm -f revcheck.html file-entities.php entities/file-entities.ent scripts/file-entities.php manual.fo
rm -fr autom4te.cache html phpweb
# }}}

View File

@@ -1,43 +0,0 @@
This directory contains the documentation for Smarty. All files are in docbook
format with an .xml extention. Different subdirs contain different available languages.
NEW BUILD SYSTEM
================
Firstly issue these commands:
1) autoconf
2) ./configure --with-lang=xx [DEFAULT=en]
TEST:
* make test
* make test_xml (test for XML validity)
MAKE:
* make (to make plain html)
* make web (to make docs for website)
Generate PDF files
==================
In order to generate PDF files you need some tools:
* Apache FOP (http://xml.apache.org/fop/)
* JRE 1.2 or later
To generate the file, just type 'make pdf'
Generate CHM files
==================
In order to generate CHM files you need the Microsoft(r) HTML Help Workshop,
which can be freely downloaded at
http://msdn.microsoft.com/library/en-us/htmlhelp/html/vsconhh1start.asp
Then type 'make chm'. This will run the 'make html' and then build the chm file.
Revision Tracking (for translations):
* make revcheck (this will create revcheck.html)
You should have libxml and autoconf installed in your system.
Read http://doc.php.net/php/dochowto/chapter-tools.php for more info.

View File

@@ -1,55 +0,0 @@
*normal mode* :
- add CDATA sections in all programlistings.
- add roles to programlisting (especially role="php") and add PHP tags in PHP examples (short_open_tag is banned). This will help to :
-- check parse errors : for i in $(ls |grep xml); do php -d short_open_tag=off -l $i; done
*pedentic mode* :
- fix indenting in all .xml files : don't uses tabs, indent by a space. Here's a nice indentation :
<para>
<example>
<title />
<programlisting>
<![CDATA[
// ..
]]>
</programlisting>
</example>
</para>
- clean all the examples :
(if aggreed) examples should be XHTML compliant and should stick to PEAR's coding standards.
Here's how a complete example, using PHP and templates, should be written :
<example>
<title>html_image example</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
where index.tpl is:
</para>
<programlisting>
<![CDATA[
{html_image file="pumpkin.jpg"}
]]>
</programlisting>
<para>
a possible output would be:
</para>
<screen>
<![CDATA[
<img src="pumpkin.jpg" alt="" border="0" width="44" height="68" />
]]>
</screen>
</example>

View File

@@ -1,3 +0,0 @@
*.chm
*.hh?
fancy

View File

@@ -1,97 +0,0 @@
****************************************************************
** This is a modified version of phpdoc/chm **
****************************************************************
BUILDING THE MANUAL IN WINDOWS HELP FILE (.CHM) FORMAT
Note: Where 'lang' is mentioned in this doc, it is the actual
language code (e.g. en) of the manual you are compiling,
not the 'lang' word itself!
With the herein described tools you're able to build the .chm manual
with two options:
a) Simply build the traditional html manual
b) Make a fancy version of the html manual and build it
=======================================================================
WHAT YOU NEED
* Microsoft(r) HTML Help Workshop.
You can download it freely at:
http://msdn.microsoft.com/library/en-us/htmlhelp/html/vsconhh1start.asp
You need the complete workshop package install (about 4 Megs).
Of course you need Microsoft(r) Windows to run that software :)
* The html manual (build with 'make')
The .chm manual generator files (from cvs.php.net):
make_chm.bat - The only file you need to run yourself.
make_chm.php - Auto toc generator.
To make the fancy manual, additional files are needed:
make_chm_fancy.php - Converts the normal html files to fancy
(good looking) pages
make_chm_index_lang.html - Fancy index. (you find it in phpdoc/lang
dir, if it exists for that language).
make_chm_spc.gif - GIF file needed by the fancy pages.
make_chm_style.css - This adds some good style to html files.
=======================================================================
INSTALLATION
Install Microsoft(r) HTML Help Workshop.
Put the above listed make_chm_* files to one directory.
Open make_chm.bat in a text editor and set the appropriate
environment variables. You need to
- set PHP_PATH to the full path of the CGI php.exe on
your machine (including php.exe).
- set PHP_HELP_COMPILER to the full path of hhc.exe on
your machine (including hhc.exe).
- set PHP_HELP_COMPILE_LANG to the language code of the
actual manual (use the code from cvs.php.net, eg. hu)
- set PHP_HELP_COMPILE_DIR to the directory of the
html manual (eg. ..\html when you build it like mentioned in the howto)
- set PHP_HELP_COMPILE_INDEX to the index filename in
the directory you set above. This used to be manual.html
for a long time, but it seems it is now index.html.
The following variable is only needed for the fancy manual:
- set PHP_HELP_COMPILE_FANCYDIR to the directory name where
the fancy pages will go.
You can decide not to sacrifice any more space for the fancy dir
(it takes ~25% more space than the normal html-manual), and set
this variable to the same as PHP_HELP_COMPILE_DIR. Then your old
HTML files will be rewritten to be fancy ones.
=======================================================================
BUILDING THE MANUAL:
Put the html manual (~2100 files) under the subdir specified above in
PHP_HELP_COMPILE_DIR (eg. html).
To compile the NORMAL manual, use the 'normal' command line option:
make_chm normal
To compile the FANCY manual, just run:
make_chm
After this process, you will have smarty_manual_lang.chm...
=======================================================================
The fancy design improvemenets and the .css file is based on
the newsite design(TM) work of Colin Viebrock [colin@easyDNS.com] :)
Written by Gabor Hojtsy (goba@php.net), and adapted by
Thomas Schoefbeck (tom@php.net). Contact them or the phpdoc list
(phpdoc@lists.php.net) if you have any questions or suggestions...
Last modified $Date$

View File

@@ -1,157 +0,0 @@
<?php
$DEFAULT_FONT = "Arial,10,0";
// Array to manual code -> HTML Help Code conversion
// Code list: http://www.helpware.net/htmlhelp/hh_info.htm
// Charset list: http://www.microsoft.com/globaldev/nlsweb/default.asp
// Language code: http://www.unicode.org/unicode/onlinedat/languages.html
// MIME preferred charset list: http://www.iana.org/assignments/character-sets
// Font list: http://www.microsoft.com/office/ork/xp/three/inte03.htm
$LANGUAGES = array(
"hk" => array(
"langcode" => "0xc04 Hong Kong Cantonese",
"preferred_charset" => "CP950",
"mime_charset_name" => "Big5",
"preferred_font" => "MingLiu,10,0"
),
"tw" => array(
"langcode" => "0x404 Traditional Chinese",
"preferred_charset" => "CP950",
"mime_charset_name" => "Big5",
"preferred_font" => "MingLiu,10,0"
),
"cs" => array(
"langcode" => "0x405 Czech",
"preferred_charset" => "Windows-1250",
"mime_charset_name" => "Windows-1250",
"preferred_font" => $DEFAULT_FONT,
),
"da" => array(
"langcode" => "0x406 Danish",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT,
),
"de" => array(
"langcode" => "0x407 German (Germany)",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT,
),
"el" => array(
"langcode" => "0x408 Greek",
"preferred_charset" => "Windows-1253",
"mime_charset_name" => "Windows-1253",
"preferred_font" => $DEFAULT_FONT
),
"en" => array(
"langcode" => "0x809 English (United Kingdom)",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT
),
"es" => array(
"langcode" => "0xc0a Spanish (International Sort)",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT
),
"fr" => array(
"langcode" => "0x40c French (France)",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT
),
"fi" => array(
"langcode" => "0x40b Finnish",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT
),
"he" => array(
"langcode" => "0x40d Hebrew",
"preferred_charset" => "Windows-1255",
"mime_charset_name" => "Windows-1255",
"preferred_font" => $DEFAULT_FONT
),
"hu" => array(
"langcode" => "0x40e Hungarian",
"preferred_charset" => "Windows-1250",
"mime_charset_name" => "Windows-1250",
"preferred_font" => $DEFAULT_FONT
),
"it" => array(
"langcode" => "0x410 Italian (Italy)",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT
),
"ja" => array(
"langcode" => "0x411 Japanese",
"preferred_charset" => "CP932",
"mime_charset_name" => "csWindows31J",
"preferred_font" => "MS PGothic,10,0"
),
"kr" => array(
"langcode" => "0x412 Korean",
"preferred_charset" => "CP949",
"mime_charset_name" => "EUC-KR",
"preferred_font" => "Gulim,10,0"
),
"nl" => array(
"langcode" => "0x413 Dutch (Netherlands)",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT
),
"pl" => array(
"langcode" => "0x415 Polish",
"preferred_charset" => "Windows-1250",
"mime_charset_name" => "Windows-1250",
"preferred_font" => $DEFAULT_FONT
),
"pt_BR" => array(
"langcode" => "0x416 Portuguese (Brazil)",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT
),
"ro" => array(
"langcode" => "0x418 Romanian",
"preferred_charset" => "Windows-1250",
"mime_charset_name" => "Windows-1250",
"preferred_font" => $DEFAULT_FONT
),
"ru" => array(
"langcode" => "0x419 Russian",
"preferred_charset" => "Windows-1251",
"mime_charset_name" => "Windows-1251",
"preferred_font" => $DEFAULT_FONT
),
"sk" => array(
"langcode" => "0x41b Slovak",
"preferred_charset" => "Windows-1250",
"mime_charset_name" => "Windows-1250",
"preferred_font" => $DEFAULT_FONT
),
"sl" => array(
"langcode" => "0x424 Slovenian",
"preferred_charset" => "Windows-1250",
"mime_charset_name" => "Windows-1250",
"preferred_font" => $DEFAULT_FONT
),
"sv" => array(
"langcode" => "0x41d Swedish",
"preferred_charset" => "Windows-1252",
"mime_charset_name" => "Windows-1252",
"preferred_font" => $DEFAULT_FONT
),
"zh" => array(
"langcode" => "0x804 Simplified Chinese",
"preferred_charset" => "CP936",
"mime_charset_name" => "gb2312",
"preferred_font" => "simsun,10,0"
)
);
?>

View File

@@ -1,75 +0,0 @@
<?php
// Used directories and files
$HTML_PATH = getenv("PHP_HELP_COMPILE_DIR");
$FANCY_PATH = getenv("PHP_HELP_COMPILE_FANCYDIR");
$LANGUAGE = getenv("PHP_HELP_COMPILE_LANG");
$INTERNAL_CHARSET = "UTF-8";
// Return a file joined on one line
function oneLiner($filename, $only_tags = false)
{
global $INTERNAL_CHARSET;
if ($only_tags) {
$buf = @preg_replace("/<([a-zA-Z1-9]+)(>|[^a-zA-Z1-9][^>]*>)/Ue", "preg_replace('/[\r\n]{1,2}/U', ' ', \"<\$1 \$2\")", file_get_contents($filename));
} else {
$buf = preg_replace("/[\r|\n]{1,2}/U", " ", file_get_contents($filename));
}
$charset = detectDocumentCharset($buf);
if ($charset === false) $charset = "UTF-8";
if ($charset != $INTERNAL_CHARSET) {
if (function_exists("iconv")) {
$buf = iconv($charset, $INTERNAL_CHARSET, $buf);
} elseif (function_exists("mb_convert_encoding")) {
$buf = mb_convert_encoding($buf, $INTERNAL_CHARSET, $charset);
} elseif (preg_match("/^UTF-?8$/i", $INTERNAL_CHARSET) && preg_match("/^(ISO-8859-1|WINDOWS-1252)$/i", $charset)) {
$buf = utf8_encode($buf);
} else {
die("charset conversion function is not available.");
}
}
return $buf;
}
function fputs_wrapper($fp, $str)
{
fputs($fp, convertCharset($str));
}
function convertCharset($buf)
{
global $LANGUAGE, $LANGUAGES, $INTERNAL_CHARSET;
$charset = $LANGUAGES[$LANGUAGE]['preferred_charset'];
if ($charset != $INTERNAL_CHARSET) {
if (function_exists("iconv")) {
$buf = iconv($INTERNAL_CHARSET, "$charset//TRANSLIT", $buf);
} elseif (function_exists("mb_convert_encoding")) {
$buf = mb_convert_encoding($buf, $charset, $INTERNAL_CHARSET);
} elseif (preg_match("/^UTF-?8$/i", $INTERNAL_CHARSET) && preg_match("/^(ISO-8859-1|WINDOWS-1252)$/i", $charset)) {
$buf = utf8_decode($buf);
} else {
die("$LANGUAGE locale is not supported.");
}
}
return $buf;
} // oneLiner() function end
// Returns the name of character set in the given document
function detectDocumentCharset($doc)
{
if (preg_match('/<META[^>]+CHARSET=["\'\s]?([\w\d-]+)["\'\s]?\s*>/iS', $doc, $reg)) {
return $reg[1];
}
return false;
}
function setDocumentCharset($doc, $charset)
{
return preg_replace("/(<META\\s+HTTP-EQUIV=\"CONTENT-TYPE\"\\s+CONTENT=\"TEXT\\/HTML;\\s+CHARSET=)([\\w\\d-]*)(\"\\s*>)/iU", "\$1$charset\$3", $doc);
}
?>

View File

@@ -1,54 +0,0 @@
@echo off
rem !! Please read the make_chm.README file for information
rem !! about how to build a "php_manual_lang.chm" file.
rem Path of the PHP executable
set PHP_PATH=php
rem Path of the Help Compiler command line tool
set PHP_HELP_COMPILER=C:\progra~1\htmlhe~1\hhc.exe
rem The source directory with the original DSSSL made HTML
set PHP_HELP_COMPILE_DIR=html
rem The directory, where the fancy files need to be copied
set PHP_HELP_COMPILE_FANCYDIR=chm\fancy
rem ==========================================================
rem !!!!! DO NOT MODIFY ANYTHING BELOW THIS LINE !!!!!
rem ==========================================================
echo.
set PHP_HELP_COMPILE_LANG=%1
if "%1" == "" set PHP_HELP_COMPILE_LANG=en
echo Language choosen: %PHP_HELP_COMPILE_LANG%
if a%2a == anormala goto skipfancy
echo Now generating the fancy manual in %PHP_HELP_COMPILE_FANCYDIR% dir...
IF NOT EXIST %PHP_HELP_COMPILE_FANCYDIR%\NUL md %PHP_HELP_COMPILE_FANCYDIR%
%PHP_PATH% chm\make_chm_fancy.php
goto normal
:skipfancy
set PHP_HELP_COMPILE_FANCYDIR=
echo Skipping fancy manual generation...
:normal
echo Now running the toc and project file generator script...
%PHP_PATH% chm\make_chm.php
echo Compiling the actual helpfile (smarty_manual_%PHP_HELP_COMPILE_LANG%.chm)...
%PHP_HELP_COMPILER% chm\smarty_manual_%PHP_HELP_COMPILE_LANG%.hhp
echo.
echo Cleaning up the directory
del chm\smarty_manual_%PHP_HELP_COMPILE_LANG%.hh?
echo Done!
echo.

View File

@@ -1,219 +0,0 @@
<?php
/*
PLEASE DO NOT MAKE ANY MAJOR MODIFICATIONS TO THIS CODE!
There is a new script collection on the way to replace
these scripts. Please see the htmlhelp folder for the new
build system.
See make_chm.README for information about this system.
*/
include_once('common.php');
include_once('chm_settings.php');
$INDEX_IN_HTML = "index.html";
if (empty($FANCY_PATH)) { $FANCY_PATH = $HTML_PATH; }
// Files on the top level of the TOC
$MAIN_FILES = array(
'getting.started.html',
'smarty.for.designers.html',
'smarty.for.programmers.html',
'appendixes.html'
);
// Header for index and toc
$HEADER = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta name="generator" content="PHP 4 - Auto TOC script">
<!-- Sitemap 1.0 -->
</head>
<body>
<object type="text/site properties">
<param name="Window Styles" value="0x800227">
</object>
<ul>';
makeProjectFile();
makeContentFiles();
// Generate the HTML Help content files
function makeContentFiles()
{
global $LANGUAGE, $MANUAL_TITLE, $HEADER, $MAIN_FILES,
$HTML_PATH, $INDEX_IN_HTML, $FIRST_PAGE;
$toc = fopen("chm/smarty_manual_$LANGUAGE.hhc", "w");
$index = fopen("chm/smarty_manual_$LANGUAGE.hhk", "w");
// Write out file headers
fputs_wrapper($toc, $HEADER);
fputs_wrapper($index, $HEADER);
// Read original index file and drop out newlines
$indexline = oneLiner("$HTML_PATH/$INDEX_IN_HTML");
// Print out the objects, autoparsing won't find
mapAndIndex($MANUAL_TITLE, $FIRST_PAGE, " ", $toc, $index, 21);
// There is a fancy index
if ($FIRST_PAGE != $INDEX_IN_HTML) {
// Find the name of the Table of Contents
preg_match('|CLASS=\"TOC\" *><DL *><DT *><B *>(.*)</B|U', $indexline, $match);
if (empty($match[1])) { // Fallback
$match[1] = "Table of Contents";
}
mapAndIndex($match[1], $INDEX_IN_HTML, " ", $toc, $index, 21);
}
// Find the name of the Preface
preg_match('|<A +HREF="preface.html" *>([^<]*)</A *>|U', $indexline, $match);
if (empty($match[1])) { // Fallback
$match[1] = "Preface";
}
mapAndIndex($match[1], "preface.html", " ", $toc, $index);
// Now autofind the main pages
$MAIN_REGEXP = join("|", $MAIN_FILES);
preg_match_all("![IVX]+\. <A\\s+HREF=\"($MAIN_REGEXP)\"\\s*>([^<]+)</A\\s*>.*</DT\\s*></DL\\s*>(?:</DD\\s*></DL\\s*>)?(?:</DD\\s*><DT\\s*>[IVX]|</DIV)!Ui", $indexline, $matches, PREG_SET_ORDER);
// Go through the main files, and link in subpages
foreach ($matches as $matchinfo) {
mapAndIndex($matchinfo[2], $matchinfo[1], " ", $toc, $index);
fputs_wrapper($toc, "\n <ul>\n");
preg_match_all('!\d+\. <A\\s+HREF="([^"]+)"\\s*>([^<]*)</A\\s*>!iSU', $matchinfo[0], $subpages, PREG_SET_ORDER);
foreach ($subpages as $spinfo) {
mapAndIndex($spinfo[2], $spinfo[1], " ", $toc, $index);
findDeeperLinks($spinfo[1], $toc, $index);
}
fputs_wrapper($toc, "\n </ul>\n");
}
// Write out closing line, and end files
fputs_wrapper($index, " </ul>\n</body>\n</html>");
fputs_wrapper($toc, " </ul>\n</body>\n</html>");
fclose($index);
fclose($toc);
} // makeContentfiles() function end
// Generates the HTML Help project file
function makeProjectFile()
{
global $LANGUAGE, $MANUAL_TITLE, $LANGUAGES,
$HTML_PATH, $FANCY_PATH, $INDEX_IN_HTML,
$FIRST_PAGE;
// Try to find the fancy index file
if (file_exists("$FANCY_PATH/fancy-index.html")) {
$FIRST_PAGE = 'fancy-index.html';
} else {
$FIRST_PAGE = $INDEX_IN_HTML;
}
$FIRST_PAGEP = substr($FANCY_PATH, 4) . "\\$FIRST_PAGE";
// Start writing the project file
$project = fopen("chm/smarty_manual_$LANGUAGE.hhp", "w");
fputs_wrapper($project, "[OPTIONS]\n");
fputs_wrapper($project, "Compatibility=1.1 or later\n");
fputs_wrapper($project, "Compiled file=smarty_manual_$LANGUAGE.chm\n");
fputs_wrapper($project, "Contents file=smarty_manual_$LANGUAGE.hhc\n");
fputs_wrapper($project, "Index file=smarty_manual_$LANGUAGE.hhk\n");
fputs_wrapper($project, "Default Window=smarty\n");
fputs_wrapper($project, "Default topic=$FIRST_PAGEP\n");
fputs_wrapper($project, "Display compile progress=Yes\n");
fputs_wrapper($project, "Full-text search=Yes\n");
// Get the proper language code from the array
fputs_wrapper($project, "Language={$LANGUAGES[$LANGUAGE]["langcode"]}\n");
// Now try to find out how the manual named in the actual language
// this must be in the index.html file as the title (DSSSL generated)
$content = oneLiner("$HTML_PATH/$INDEX_IN_HTML");
if (preg_match("|<TITLE\s*>([^<]*)</TITLE\s*>|U", $content, $found)) {
$MANUAL_TITLE = $found[1];
} else { // Fallback
$MANUAL_TITLE = "Smarty Manual";
}
fputs_wrapper($project, "Title=$MANUAL_TITLE\n");
fputs_wrapper($project, "Default Font={$LANGUAGES[$LANGUAGE]['preferred_font']}\n");
// Define the phpdoc window style (adds more functionality)
fputs_wrapper($project, "\n[WINDOWS]\nsmarty=\"$MANUAL_TITLE\",\"smarty_manual_$LANGUAGE.hhc\",\"smarty_manual_$LANGUAGE.hhk\"," .
"\"$FIRST_PAGEP\",\"$FIRST_PAGEP\",,,,,0x23520,,0x386e,,,,,,,,0\n");
// Write out all the filenames as in FANCY_PATH
fputs_wrapper($project, "\n[FILES]\n");
$handle = opendir($FANCY_PATH);
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
fputs_wrapper($project, substr($FANCY_PATH, 4)."\\$file\n");
}
}
closedir($handle);
fclose($project);
} // makeProjectFile() function end
// Print out a SiteMap object for a file
function mapAndIndex($name, $local, $tabs, $toc, $index, $imgnum = "auto")
{
global $FANCY_PATH;
$name = str_replace('"', '&quot;', $name);
fputs_wrapper($toc, "
$tabs<li><object type=\"text/sitemap\">
$tabs <param name=\"Name\" value=\"$name\">
$tabs <param name=\"Local\" value=\"".substr($FANCY_PATH, 4)."\\$local\">
");
if ($imgnum != "auto") {
fputs_wrapper($toc, "$tabs <param name=\"ImageNumber\" value=\"$imgnum\">\r\n");
}
fputs_wrapper($toc, "$tabs </object>\r\n");
fputs_wrapper($index, "
<li><object type=\"text/sitemap\">
<param name=\"Local\" value=\"".substr($FANCY_PATH, 4)."\\$local\">
<param name=\"Name\" value=\"$name\">
</object></li>
");
} // mapAndIndex() function end
// Process a file, and find any links need to be presented in tree
function findDeeperLinks ($filename, $toc, $index)
{
global $HTML_PATH;
$contents = oneLiner("$HTML_PATH/$filename");
// Find all sublinks
if (preg_match_all("!<DT\\s*><A\\s+HREF=\"(([\\w\\.-]+\\.)+html)(\\#[\\w\\.-]+)?\"\\s*>([^<]*)</A\\s*>!U", $contents, $matches, PREG_SET_ORDER)) {
// Print out the file informations for all the links
fputs_wrapper($toc, "\n <ul>");
foreach ($matches as $onematch) {
$param["html"] = $onematch[1];
if (!empty($onematch[3])) {
$param["html"] .= $onematch[3];
}
$param["title"] = strip_tags($onematch[4]);
mapAndIndex($param["title"], $param["html"], " ", $toc, $index);
}
fputs_wrapper($toc, " </ul>\n");
} else {
echo "no deeper TOC info found in $filename\n";
}
} // findDeeperLinks() function end
?>

View File

@@ -1,131 +0,0 @@
<?php
/*
PLEASE DO NOT MAKE ANY MAJOR MODIFICATIONS TO THIS CODE!
There is a new script collection on the way to replace
these scripts. Please be patient while it will be ready
to put here in CVS.
*/
include_once('common.php');
include_once('chm_settings.php');
// This script takes much time to run
set_time_limit(0);
// Get ENV vars from the system
$original_index = "index.html";
// How many files were processed
$counter = 0;
// Open the directory, and do the work on all HTML files
$handle = opendir($HTML_PATH);
while (false !== ($filename = readdir($handle))) {
if (strpos($filename, ".html") && ($filename != "fancy-index.html")) {
fancy_design($filename);
}
}
closedir($handle);
// Look for CHM index file (snap-downloader, cvs-usr with/without lang-support)
if (false == ($content = oneLiner("$LANGUAGE/make_chm_index.html", true))) {
$content = oneLiner("en/make_chm_index.html", true);
}
// Make GENTIME the actual date/time
$content = str_replace("[GENTIME]", date("D M d H:i:s Y"), $content);
$content = str_replace("[PUBTIME]", $publication_date, $content);
$content = setDocumentCharset($content, $LANGUAGES[$LANGUAGE]['mime_charset_name']);
$fp = fopen("$FANCY_PATH/fancy-index.html", "w");
fputs_wrapper($fp, $content);
fclose($fp);
copy("chm/make_chm_style.css", "$FANCY_PATH/style.css");
copy("chm/make_chm_spc.gif", "$FANCY_PATH/spacer.gif");
// Three files added (fancy-index.html, style.css and spacer.gif)
$counter += 3;
echo "\nConverting ready...\n";
echo "Total number of files written in $FANCY_PATH directory: $counter\n\n";
/***********************************************************************/
/* End of script lines, one main function follows */
/***********************************************************************/
// Convert one file from HTML => fancy HTML
function fancy_design($fname)
{
global $HTML_PATH, $FANCY_PATH, $LANGUAGE, $LANGUAGES, $counter, $original_index, $publication_date;
// Get the contents of the file from $HTML_PATH
$content = oneLiner("$HTML_PATH/$fname", true);
// CSS file linking
$content = preg_replace("|</HEAD|", '<LINK REL="stylesheet" HREF="style.css"></HEAD', $content);
// No margins around
$content = preg_replace("/<BODY/", '<BODY TOPMARGIN="0" LEFTMARGIN="0"', $content);
// HR dropout
$content = preg_replace("/<HR\\s+ALIGN=\"LEFT\"\\s+WIDTH=\"100%\">/", '', $content);
// Whole page table and backgrounds
$wpbegin = '<TABLE BORDER="0" WIDTH="100%" HEIGHT="100%" CELLSPACING="0" CELLPADDING="0"><TR><TD COLSPAN="3">';
$bnavt = '<TABLE BGCOLOR="#CCCCFF" BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">';
$lnavt = '<TR BGCOLOR="#333366"><TD><IMG SRC="spacer.gif" BORDER="0" WIDTH="1" HEIGHT="1"><BR></TD></TR>';
$space = '<IMG SRC="spacer.gif" WIDTH="10" HEIGHT="1">';
// Navheader backgound
$content = preg_replace("/<DIV\\s+CLASS=\"NAVHEADER\"\\s*><TABLE(.*)CELLPADDING=\"0\"(.*)<\\/TABLE\\s*><\\/DIV\\s*>/Us",
$wpbegin . '<DIV CLASS="NAVHEADER">' . $bnavt . '<TR><TD><TABLE\\1CELLPADDING="3"\\2</TABLE></TD></TR>' . $lnavt . '</TABLE></DIV></TD></TR><TR><TD>' . $space . '</TD><TD HEIGHT="100%" VALIGN="TOP" WIDTH="100%"><BR>', $content);
// Navfooter backgound
$content = preg_replace("/<DIV\\s+CLASS=\"NAVFOOTER\"\\s*><TABLE(.*)CELLPADDING=\"0\"(.*)<\\/TABLE\\s*><\\/DIV\\s*>/Us",
'<BR></TD><TD>' . $space . '</TD></TR><TR><TD COLSPAN="3"><DIV CLASS="NAVFOOTER">' . $bnavt . $lnavt . '<TR><TD><TABLE\\1CELLPADDING="3"\\2</TABLE></TD></TR></TABLE></DIV></TD></TR></TABLE>', $content);
// Fix copyright page fault...
if ($fname == "copyright.html") {
$content = preg_replace("/&#38;copy;/", "&copy;", $content);
$content = preg_replace("/<A\\s+HREF=\"$original_index#(authors|translators)\"/U", "<A HREF=\"fancy-index.html\"", $content);
$content = preg_replace("|(</TH\\s*></TR\\s*>)|", "\\1<TR><TH COLSPAN=\"3\" ALIGN=\"center\">&nbsp;</TH></TR>", $content);
$content = preg_replace("|(&nbsp;</TD\\s*></TR\\s*>)|", "\\1<TR><TD COLSPAN=\"3\" ALIGN=\"center\">&nbsp;</TD></TR>", $content);
}
// Fix the original manual index to look far better...
elseif ($fname == "$original_index") {
// Find out manual generation date
if (preg_match('|<P\s+CLASS="pubdate"\s*>([\\d-]+)<BR></P\s*>|U', $content, $match)) {
$publication_date = $match[1];
} else {
$publication_date = 'n/a';
}
// Modify the index file to meet our needs
preg_match('|CLASS=\"title\"\\s*><A\\s+NAME=\"manual\"\\s*>(.*)</A\\s*>(.*)</H1|U', $content, $match);
$indexchange = '<TABLE BORDER="0" WIDTH="100%" HEIGHT="100%" CELLSPACING="0" CELLPADDING="0"><TR><TD COLSPAN="3"><DIV CLASS="NAVHEADER"><TABLE BGCOLOR="#CCCCFF" BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%"><TR><TD><TABLE
WIDTH="100%" BORDER="0" CELLPADDING="3" CELLSPACING="0"><TR><TH COLSPAN="3">'.$match[2].'</TH></TR><TR><TD COLSPAN="3" ALIGN="center">&nbsp;</TD></TR></TABLE></TD></TR><TR BGCOLOR="#333366"><TD><IMG SRC="spacer.gif" BORDER="0" WIDTH="1" HEIGHT="1"><BR></TD></TR></TABLE>
</DIV></TD></TR><TR><TD><IMG SRC="spacer.gif" WIDTH="10" HEIGHT="1"></TD><TD HEIGHT="100%" VALIGN="TOP" WIDTH="100%"><BR>';
$content = preg_replace("/(<DIV\\s+CLASS=\"BOOK\")/", "$indexchange\\1", $content);
$content = preg_replace("/(<DIV\\s+CLASS=\"author\").*<HR>/Us", "", $content);
preg_match('|<DIV\\s+CLASS="TOC"\\s*><DL\\s*><DT\\s*><B\\s*>(.*)</B\\s*>|U', $content, $match);
$content = preg_replace("|(CLASS=\"title\"\\s+><A\\s+NAME=\"manual\"\\s*>).*(</A\\s*>).*(</H1)|U", "\\1$match[1]\\2\\3", $content);
$content = preg_replace("|<DT\\s*><B\\s*>(.*)</B\\s*></DT\\s*>|U", "", $content);
}
// Print out that new file to $FANCY_PATH
$fp = fopen("$FANCY_PATH/$fname", "w");
$content = setDocumentCharset($content, $LANGUAGES[$LANGUAGE]['mime_charset_name']);
fputs_wrapper($fp, $content);
fclose($fp);
// Print out a message to see the progress
echo "$FANCY_PATH/$fname ready...\n";
$counter++;
} // fancy_design() function end
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 B

View File

@@ -1,57 +0,0 @@
BODY {
FONT-FAMILY: Verdana,arial,helvetica,sans-serif; FONT-SIZE: 10pt
}
TD {
FONT-FAMILY: Verdana,arial,helvetica,sans-serif; FONT-SIZE: 10pt
}
TH {
FONT-FAMILY: Verdana,arial,helvetica,sans-serif; FONT-SIZE: 10pt
}
P {
MARGIN-BOTTOM: 2pt; MARGIN-TOP: 10pt
}
EM {
FONT-STYLE: italic; FONT-WEIGHT: bold
}
UL {
MARGIN-TOP: 10pt
}
OL {
MARGIN-TOP: 10pt
}
PRE {
FONT-FAMILY: "andale mono", "monotype.com", "courier new", monospace; FONT-SIZE: 10pt
}
A.nav {
COLOR: #000066; TEXT-DECORATION: none; FONT-WEIGHT: bold
}
A.nav:hover {
COLOR: #000066; TEXT-DECORATION: underline; FONT-WEIGHT: bold
}
H1 {
COLOR: #000066; FONT-FAMILY: tahoma,arial,helvetica,sans-serif; FONT-SIZE: 18pt; FONT-WEIGHT: bold; MARGIN-BOTTOM: 5pt
}
H2 {
COLOR: #000066; FONT-FAMILY: tahoma,arial,helvetica,sans-serif; FONT-SIZE: 14pt; FONT-WEIGHT: bold; MARGIN-BOTTOM: 5pt
}
H3 {
COLOR: #000066; FONT-FAMILY: tahoma,arial,helvetica,sans-serif; FONT-SIZE: 12pt; FONT-WEIGHT: bold; MARGIN-BOTTOM: 5pt
}
SMALL {
FONT-FAMILY: arial,helvetica,sans-serif; FONT-SIZE: 8.5pt
}
.tableTitle {
FONT-FAMILY: arial,helvetica,sans-serif; FONT-SIZE: 12pt; FONT-WEIGHT: bold
}
.tableExtras {
COLOR: #ffffff; FONT-FAMILY: arial,helvetica,sans-serif; FONT-SIZE: 8.5pt
}
TABLE.warning, TABLE.caution {
border-color : #B22222;
background-color : #EEE8AA;
border-width : 2;
font : bold normal Arial, Helvetica, sans-serif;
margin : 0;
border-spacing : 0px;
}

View File

@@ -1,428 +0,0 @@
dnl $Id$
dnl autoconf initialisation
AC_INIT()
WORKDIR=`pwd`
SRCDIR=$srcdir
AC_SUBST(SRCDIR)
AC_SUBST(WORKDIR)
dnl debug output
echo "file versions"
for file in ./*.in; do
fgrep '$Id' $file | head -n1 | sed -e"s/^.*: //g" | sed -e"s/200.\/.*$//g"
done
echo "configure options: $@"
echo "working directory: $WORKDIR"
echo
dnl {{{ check for support programs
dnl {{{ check for PHP
dnl use given argument, if any, else search in path
AC_ARG_WITH(php,
[ --with-php=PATH look for PHP executable needed for helper scripts],
[
if test $withval != "yes"; then
AC_MSG_CHECKING([for php])
if test -x $withval; then
PHP=$withval
AC_MSG_RESULT($PHP)
else
PHP=no
AC_MSG_RESULT(no)
AC_MSG_ERROR([$withval: not an executable file])
fi
else
if test -e ../../phpdoc-tools/php.bat ; then
AC_MSG_CHECKING([for php])
PHP=../../phpdoc-tools/php.bat
AC_MSG_RESULT($PHP)
else
AC_PATH_PROG(PHP,"php",no)
if test $PHP = "no"; then
AC_PATH_PROG(PHP4,"php4",no)
PHP=$PHP4
fi
fi
fi
],[
if test -e ../../phpdoc-tools/php.bat ; then
AC_MSG_CHECKING([for php])
PHP=../../phpdoc-tools/php.bat
AC_MSG_RESULT($PHP)
else
AC_PATH_PROG(PHP,"php",no)
if test $PHP = "no"; then
AC_PATH_PROG(PHP4,"php4",no)
PHP=$PHP4
fi
fi
]
)
if test $PHP = "no"; then
AC_MSG_ERROR([no PHP binary found])
fi
AC_SUBST(PHP)
dnl }}}
dnl {{{ check for the Jade or OpenJade DSSSL parser
dnl use given argument, if any, else search in path
AC_ARG_WITH(jade,
[ --with-jade=PATH look for jade or openjade executable],[
if test $withval != "yes"; then
AC_MSG_CHECKING([for jade])
if test -x $withval; then
JADE=$withval
AC_MSG_RESULT($JADE)
else
JADE=no
AC_MSG_RESULT(no)
AC_MSG_ERROR([$withval: not an executable file])
fi
else
if test -e ../../phpdoc-tools/jade/jade.exe ; then
AC_MSG_CHECKING([for jade])
JADE=../../phpdoc-tools/jade/jade.exe
AC_MSG_RESULT($JADE)
else
AC_PATH_PROG(OPENJADE,"openjade",no)
if test $OPENJADE = "no"; then
AC_PATH_PROG(JADE,"jade",no)
else
JADE=$OPENJADE
fi
fi
fi
],[
if test -e ../../phpdoc-tools/jade/jade.exe ; then
AC_MSG_CHECKING([for jade])
JADE=../../phpdoc-tools/jade/jade.exe
AC_MSG_RESULT($JADE)
else
AC_PATH_PROG(OPENJADE,"openjade",no)
if test $OPENJADE = "no"; then
AC_PATH_PROG(JADE,"jade",no)
else
JADE=$OPENJADE
fi
fi
]
)
if test $JADE = "no"; then
AC_MSG_ERROR([can't find jade or openjade])
fi
if test ${JADE:0:18} = "../../phpdoc-tools"; then
WINJADE=1
else
WINJADE=0
fi
AC_SUBST(JADE)
AC_SUBST(WINJADE)
dnl }}}
dnl {{{ check for nsgmls or onsgmls
AC_ARG_WITH(nsgmls,
[ --with-nsgmls=PATH look for nsgmls or onsgmls executable],[
if test $withval != "yes"; then
AC_MSG_CHECKING([for nsgmls])
if test -x $withval; then
NSGMLS=$withval
AC_MSG_RESULT($NSGMLS)
else
NSGMLS=no
AC_MSG_RESULT(no)
AC_MSG_ERROR([$withval: not an executable file])
fi
else
if test -e ../../phpdoc-tools/jade/nsgmls.exe ; then
AC_MSG_CHECKING([for nsgmls])
NSGMLS=../../phpdoc-tools/jade/nsgmls.exe
AC_MSG_RESULT($NSGMLS)
else
AC_PATH_PROG(ONSGMLS,"onsgmls",no)
if test $ONSGMLS = "no"; then
AC_PATH_PROG(NSGMLS,"nsgmls",no)
else
NSGMLS=$ONSGMLS
fi
fi
fi
],[
if test -e ../../phpdoc-tools/jade/nsgmls.exe ; then
AC_MSG_CHECKING([for nsgmls])
NSGMLS=../../phpdoc-tools/jade/nsgmls.exe
AC_MSG_RESULT($NSGMLS)
else
AC_PATH_PROG(ONSGMLS,"onsgmls",no)
if test $ONSGMLS = "no"; then
AC_PATH_PROG(NSGMLS,"nsgmls",no)
else
NSGMLS=$ONSGMLS
fi
fi
]
)
if test $NSGMLS = "no"; then
AC_MSG_ERROR([can't find nsgmls or onsgmls])
fi
AC_SUBST(NSGMLS)
dnl }}}
dnl {{{ check for FOP
AC_ARG_WITH(fop,
[ --with-fop=PATH look for fop],
[
if test $withval != "yes"; then
AC_MSG_CHECKING([for FOP])
if test -x $withval -a -f $withval
then
FOP=$withval
AC_MSG_RESULT($FOP)
else
FOP=no
AC_MSG_RESULT(no)
AC_MSG_ERROR([$withval: not an executable file])
fi
else
if test -e ../../phpdoc-tools/fop/fop.bat ; then
AC_MSG_CHECKING([for FOP])
FOP=../../phpdoc-tools/fop/fop.bat
AC_MSG_RESULT($FOP)
else
AC_PATH_PROG(FOP,"fop",no)
fi
fi
],[
if test -e ../../phpdoc-tools/fop/fop.bat ; then
AC_MSG_CHECKING([for FOP])
FOP=../../phpdoc-tools/fop/fop.bat
AC_MSG_RESULT($FOP)
else
AC_PATH_PROG(FOP,"fop",no)
fi
]
)
if test $FOP = "no"; then
AC_MSG_WARN([no fop binary found, PDF generation won't work])
fi
dnl }}}
dnl {{{ check for xmllint
AC_ARG_WITH(xmllint,
[ --with-xmllint=PATH check for xmllint],
[
if test $withval != "yes"; then
AC_MSG_CHECKING([for xmllint])
if test -x $withval -a -f $withval
then
XMLLINT=$withval
AC_MSG_RESULT($XMLLINT)
else
XMLLINT=no
AC_MSG_RESULT(no)
AC_MSG_ERROR([$withval: no xmllint binary found])
fi
else
if test -e ../../phpdoc-tools/libxml/xmllint.exe ; then
AC_MSG_CHECKING([for xmllint])
XSLTPROC=../../phpdoc-tools/libxml/xmllint.exe
AC_MSG_RESULT($XMLLINT)
else
AC_PATH_PROG(XMLLINT,"xmllint",no)
fi
fi
],[
if test -e ../../phpdoc-tools/libxml/xmllint.exe ; then
AC_MSG_CHECKING([for xmllint])
XMLLINT=../../phpdoc-tools/libxml/xmllint.exe
AC_MSG_RESULT($XMLLINT)
else
AC_PATH_PROG(XMLLINT,"xmllint",no)
fi
]
)
if test $XMLLINT = "no"; then
AC_MSG_WARN([no xmllint binary found, XML Validation won't work])
fi
AC_SUBST(XMLLINT)
dnl }}}
dnl }}}
dnl {{{ check for catalog files
CATALOG=""
dnl iso-ents catalog file
dnl The 4.1.2 DocBook DTD also includes entity files, but they cannot be used with Jade!
if test -e ./entities/ISO/catalog
then
CATALOG="$CATALOG -c ./entities/ISO/catalog"
fi
dnl DSSSL catalog file
if test -e ./dsssl/docbook/catalog
then
CATALOG="$CATALOG -c ./dsssl/docbook/catalog"
fi
dnl For windows (and maybe *nix too?) users lacking catalog-files
dnl jade catalog file
# how about using JADEPATH? You should replace the last 4 chars ('jade') with catalog
# !! JADEPATH may not properly be set on windows, so do not use it !!
if test -e ../../phpdoc-tools/jade/catalog
then
CATALOG="$CATALOG -c ../../phpdoc-tools/jade/catalog"
fi
dnl SuSE openjade setup
if test -e /usr/share/sgml/CATALOG.docbk41
then
CATALOG="$CATALOG -c /usr/share/sgml/CATALOG.docbk41"
fi
if test -e /usr/share/sgml/CATALOG.jade_dsl
then
CATALOG="$CATALOG -c /usr/share/sgml/CATALOG.jade_dsl"
fi
dnl As a very last option, include default catalog files from phpdoc
dnl (imported from the openjade distribution)
if test -e $srcdir/dsssl/defaults/catalog
then
CATALOG="$CATALOG -c ./dsssl/defaults/catalog"
fi
AC_SUBST(CATALOG)
dnl }}}
dnl {{{ language specific stuff
AC_MSG_CHECKING(for language)
BUILD_DATE=`date '+%Y-%m-%d'`
AC_ARG_WITH(lang,
[ --with-lang=LANG choose a language to work with],[
if test "$withval" = "yes"; then
LANG=en
AC_MSG_RESULT([en (default)])
else
if test ! -d "./$withval"; then
AC_MSG_RESULT()
AC_MSG_ERROR(Language \"$withval\" not supported!)
else
LANG=$withval
AC_MSG_RESULT($LANG)
fi
BUILD_DATE=`date '+%d-%m-%Y'`
fi
case $withval in
ja)
BUILD_DATE=`date '+%Y/%m/%d'`
;;
*)
esac
],[
LANG=en
AC_MSG_RESULT([en (default)])
])
AC_SUBST(LANG)
AC_SUBST(BUILD_DATE)
case "$LANG" in
ru) ENCODING="utf-8"
FOP="$FOP -c fop/ru.cfg";;
de) ENCODING="utf-8";;
es) ENCODING="utf-8";;
fr) ENCODING="utf-8";;
id) ENCODING="utf-8";;
it) ENCODING="utf-8";;
ja) ENCODING="utf-8";;
pt_BR) ENCODING="utf-8";;
*) ENCODING="ISO-8859-1";;
esac
SP_OPTIONS="SP_ENCODING=XML SP_CHARSET_FIXED=YES"
AC_SUBST(ENCODING)
AC_SUBST(FOP)
AC_SUBST(SP_OPTIONS)
dnl }}}
dnl {{{ makefile targets for configure-generated files
rm -f autogenerated_rules
(
for file in `find . -name "*.in"`; do
case "$file" in
./configure.in)
echo configure: configure.in
printf '\t autoconf'
echo
;;
./manual.xml.in)
;;
*)
echo `dirname $file`/`basename $file .in`: '$(srcdir)'/$file ./config.status
printf '\t CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status'
echo
esac
done
) > autogenerated_rules
AUTOGENERATED_RULES=autogenerated_rules
AC_SUBST_FILE(AUTOGENERATED_RULES)
rm -f autogenerated_rules
dnl }}}
dnl {{{ generate output files
dnl {{{ find all *.in files and process them with AC_OUTPUT
for infile in `find $srcdir -name "*.in"`
do
if test `basename $infile` != "configure.in"
then
outfile=`basename $infile .in`
outdir=`dirname $infile`
outdir=`echo $outdir/ | sed -e"s|$srcdir/||"`
OUTFILES="$OUTFILES ./$outdir$outfile"
fi
done
AC_OUTPUT($OUTFILES)
dnl }}}
dnl {{{ generate entity mapping file, missing entities and IDs
dnl if we have PHP use it for all of these things
if test $PHP != "no"
then
dnl create entity mapping file
$PHP -q ./scripts/file-entities.php
else
echo ERROR: configure process cannot continue, PHP is not found
fi
dnl }}}
dnl }}}

View File

@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<!-- $Revision$ -->
<chapter id="bugs">
<title>BUGS</title>
<para>
Bitte konsultieren Sie die Datei <filename>BUGS</filename> welche mit Smarty ausgeliefert wird,
oder die Webseite.
</para>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<chapter id="resources">
<title>Weiterf&uuml;hrende Informationen</title>
<para>
Smarty's Homepage erreicht man unter <ulink
url="&url.smarty;">&url.smarty;</ulink>. Sie k&ouml;nnen der Smarty
Mailingliste beitreten in dem sie ein E-mail an
&ml.general.sub;. Das Archiv der Liste ist hier <ulink
url="&url.ml.archive;">&url.ml.archive;</ulink> einsehbar.
</para>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,426 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: messju Status: ready -->
<chapter id="tips">
<title>Tips &amp; Tricks</title>
<para>
</para>
<sect1 id="tips.blank.var.handling">
<title>Handhabung unangewiesener Variablen</title>
<para>
Manchmal möchten Sie vielleicht, dass anstatt einer Leerstelle ein
Standardwert ausgegeben wird - zum Beispiel um im
Tabellenhintergrund "&amp;nbsp;" auszugeben, damit er korrekt
angezeigt wird. Damit dafür keine <link
linkend="language.function.if">{if}</link> Anweisung verwendet
werden muss, gibt es in Smarty eine Abkürzung: die Verwendung des
<emphasis>default</emphasis> Variablen-Modifikators.
</para>
<example>
<title>"&amp;nbsp;" ausgeben wenn eine Variable nicht zugewiesen ist</title>
<programlisting>
<![CDATA[
{* die lange Variante: *}
{if $titel eq ""}
&nbsp;
{else}
{$titel}
{/if}
{* kürzer: *}
{$titel|default:"&nbsp;"}
]]>
</programlisting>
</example>
<para>
Siehe auch <link linkend="language.modifier.default">default
(Standardwert)</link> und <link
linkend="tips.default.var.handling">Handhabung von
Standardwerten</link>.
</para>
</sect1>
<sect1 id="tips.default.var.handling">
<title>Handhabung von Standardwerten</title>
<para>
Wenn eine Variable in einem Template häufig zum Einsatz kommt,
kann es ein bisschen störend wirken, den <link
linkend="language.modifier.default"><emphasis>default</emphasis></link>-Modifikator
jedes mal anzuwenden. Sie können dies umgehen, indem Sie der
Variable mit der <link
linkend="language.function.assign">{assign}</link> Funktion einen
Standardwert zuweisen.
</para>
<example>
<title>Zuweisen des Standardwertes einer Variable</title>
<programlisting>
<![CDATA[
{* schreiben sie dieses statement an den Anfang des Templates *}
{assign var="titel" value=$titel|default:"kein Titel"}
{* falls 'titel' bei der Anweisung leer war, enthält es nun den Wert
'kein Titel' wenn Sie es ausgeben *}
{$titel}
]]>
</programlisting>
</example>
<para>
Siehe auch <link linkend="language.modifier.default">default
(Standardwert)</link> und <link
linkend="tips.blank.var.handling">Handhabung nicht zugewiesener
Variablen</link>.
</para>
</sect1>
<sect1 id="tips.passing.vars">
<title>Variablen an eingebundene Templates weitergeben</title>
<para>
Wenn die Mehrzahl Ihrer Templates den gleichen Header und Footer
verwenden, lagert man diese meist in eigene Templates aus und
bindet diese mit<link
linkend="language.function.include">{include}</link> ein. Was
geschieht aber wenn der Header einen seitenspezifischen Titel
haben soll? Smarty bietet die Möglichkeit, dem eingebundenen
Template, Variablen als <link
linkend="language.syntax.attributes">Attribute</link> zu
übergeben.
</para>
<example>
<title>Die Titel-Variable dem Header-Template zuweisen</title>
<para>
<filename>mainpage.tpl</filename> - Beim Aufbau der Hauptseite
wird der Titel "Hauptseite" an <filename>header.tpl</filename>
übergeben und dort verwendet.
</para>
<programlisting>
<![CDATA[
{include file="header.tpl" title="Hauptseite"}
{* template body hier *}
{include file="footer.tpl"}
]]>
</programlisting>
<para>
<filename>archives.tpl</filename>
</para>
<programlisting>
<![CDATA[
{config_load file="archiv.conf"}
{include file="header.tpl" title=#archivSeiteTitel#}
{* template body hier *}
{include file="footer.tpl"}
]]>
</programlisting>
<para>
<filename>header.tpl</filename> - Zur Info: wenn kein $titel
übergeben wurde wird hier mittels des <link
linkend="language.modifier.default">default</link>-Modifikator der
Titel "Nachrichten" verwendet.
</para>
<programlisting>
<![CDATA[
<html>
<head>
<title>{$title|default:"Nachrichten"}</title>
</head>
<body>
]]>
</programlisting>
<para>
<filename>footer.tpl</filename>
</para>
<programlisting>
<![CDATA[
</BODY>
</HTML>
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.dates">
<title>Zeitangaben</title>
<para>
Um dem Template Designer höchstmögliche Kontrolle über die Ausgabe
von Zeitangaben/Daten zu ermöglichen, ist es empfehlenswert Daten
immer als <ulink url="&url.php-manual;time">Timestamp</ulink> zu
übergeben. Der Designer kann danach die Funktion <link
linkend="language.modifier.date.format">date_format</link> für die
Formatierung verwenden.
</para>
<para>
Bemerkung: Seit Smarty 1.4.0 ist es möglich jede Timestamp zu
übergeben, welche mit strtotime() ausgewertet werden kann. Dazu
gehören Unix-Timestamps und MySQL-Timestamps.
</para>
<example>
<title>Die Verwendung von date_format</title>
<programlisting>
<![CDATA[
{$startDate|date_format}
]]>
</programlisting>
<para>
AUSGABE:
</para>
<screen>
<![CDATA[
Jan 4, 2001
]]>
</screen>
<programlisting>
<![CDATA[
{$startDatum|date_format:"%Y/%m/%d"}
]]>
</programlisting>
<para>
AUSGABE:
</para>
<screen>
<![CDATA[
2001/01/04
]]>
</screen>
<programlisting>
<![CDATA[
{if $datum1 < $datum2}
...
{/if}
]]>
</programlisting>
</example>
<para>
Falls <link
linkend="language.function.html.select.date">{html_select_date}</link>
in einem Template verwendet wird, hat der Programmierer die
Möglichkeit den Wert wieder in ein Timestamp-Format zu
ändern. Dies kann zum Beispiel wie folgt gemacht werden:
</para>
<example>
<title>Formular Datum-Elemente nach Timestamp konvertieren</title>
<programlisting role="php">
<![CDATA[
<?php
// hierbei wird davon ausgegangen, dass Ihre Formular Elemente wie folgt benannt sind
// startDate_Day, startDate_Month, startDate_Year
$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
function makeTimeStamp($year="",$month="",$day="")
{
if(empty($year)) {
$year = strftime("%Y");
}
if(empty($month)) {
$month = strftime("%m");
}
if(empty($day)) {
$day = strftime("%d");
}
return mktime(0, 0, 0, $month, $day, $year);
}
]]>
</programlisting>
</example>
<para>
Siehe auch
<link linkend="language.function.html.select.date">{html_select_date}</link>,
<link linkend="language.function.html.select.time">{html_select_time}</link>,
<link linkend="language.modifier.date.format">date_format</link>
und <link linkend="language.variables.smarty.now">$smarty.now</link>,
</para>
</sect1>
<sect1 id="tips.wap">
<title>WAP/WML</title>
<para>
WAP/WML Templates verlangen, dass ein Content-Type Header im
Template angegeben wird. Der einfachste Weg um dies zu tun, wäre,
eine Funktion zu schreiben, welche den Header ausgibt. Falls sie
den Caching Mechanismus verwenden, sollten Sie auf das
'insert'-Tag zurückgreifen ('insert'-Tags werden nicht gecached),
um ein optimales Ergebnis zu erzielen. Achten Sie darauf, dass vor
der Ausgabe des Headers keine Daten an den Client gesendet werden,
da die gesendeten Header-Daten ansonsten von Client verworfen
werden.
</para>
<example>
<title>Die verwendung von 'insert' um einen WML Content-Type header zu senden</title>
<programlisting>
<![CDATA[
<?php
// stellen Sie sicher, dass Apache mit .wml Dateien umgehen kann!
// schreiben Sie folgende Funktion in Ihrer Applikation, oder in Smarty.addons.php
function insert_header($params)
{
// folgende Funktion erwartet ein $inhalt argument
if (empty($params['inhalt'])) {
return;
}
header($params['inhalt']);
return;
}
?>
]]>
</programlisting>
<para>
Ihr Template <emphasis>muss</emphasis> danach wie folgt beginnen:
</para>
<programlisting>
<![CDATA[
{insert name=header inhalt="Content-Type: text/vnd.wap.wml"}
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<!-- neues wml deck -->
<wml>
<!-- erste karte -->
<card>
<do type="accept">
<go href="#zwei"/>
</do>
<p>
Welcome to WAP with Smarty!
Willkommen bei WAP mit Smarty!
OK klicken um weiterzugehen...
</p>
</card>
<!-- zweite karte -->
<card id="zwei">
<p>
Einfach, oder?
</p>
</card>
</wml>
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.componentized.templates">
<title>Template/Script Komponenten</title>
<para>
Normalerweise werden Variablen dem Template wie folgt zugewiesen:
In Ihrer PHP-Applikation werden die Variablen zusammengestellt
(zum Beispiel mit Datenbankabfragen). Danach kreieren Sie eine
Instanz von Smarty, weisen die Variablen mit <link
linkend="api.assign">assign()</link> zu und geben das Template mit
<link linkend="api.display">display()</link> aus. Wenn wir also
zum Beispiel einen Börsenticker in unserem Template haben, stellen
wir die Kursinformationen in unserer Anwendung zusammen, weisen
Sie dem Template zu und geben es aus. Wäre es jedoch nicht nett
diesen Börsenticker einfach in ein Template einer anderen
Applikation einbinden zu können ohne deren Programmcode zu ändern?
</para>
<para>
Sie können PHP-Code mit {php}{/php} in Ihre Templates einbetten.
So können Sie Templates erstellen, welche die Datenstrukturen zur
Anweisung der eigenen Variablen enthalten. Durch die Bindung von
Template und Logik entsteht so eine eigenständig lauffähige
Komponente.
</para>
<example>
<title>Template/Script Komponenten</title>
<para>
<filename>function.load_ticker.php</filename> -
Diese Datei gehört ins <link
linkend="variable.plugins.dir">$plugins directory</link>
</para>
<programlisting role="php">
<![CDATA[
<?php
// setup our function for fetching stock data
function fetch_ticker($symbol)
{
// put logic here that fetches $ticker_info
// from some ticker resource
return $ticker_info;
}
function smarty_function_load_ticker($params, $smarty)
{
// call the function
$ticker_info = fetch_ticker($params['symbol']);
// assign template variable
$smarty->assign($params['assign'], $ticker_info);
}
?>
]]>
</programlisting>
<para>
<filename>index.tpl</filename>
</para>
<programlisting>
<![CDATA[
{load_ticker symbol="YHOO" assign="ticker"}
Stock Name: {$ticker.name} Stock Price: {$ticker.price}
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.obfuscating.email">
<title>Verschleierung von E-mail Adressen</title>
<para>
Haben Sie sich auch schon gewundert, wie Ihre E-mail Adresse auf
so viele Spam-Mailinglisten kommt? Ein Weg, wie Spammer E-mail
Adressen sammeln, ist über Webseiten. Um dieses Problem zu
bekämpfen, können sie den 'mailto'-Plugin verwenden. Er ändert
die Zeichenfolge mit Javascript so, dass sie im HTML Quellcode
nicht lesbar ist, jedoch von jedem Browser wieder zusammengesetzt
werden kann. Den <link
linkend="language.function.mailto">{mailto}</link>-Plugin gibt es
im Smarty-Repository auf http://smarty.php.net. Laden sie den
Plugin herunter und speichern Sie ihn im 'plugins' Verzeichnis.
</para>
<example>
<title>Beispiel von verschleierung von E-mail Adressen</title>
<programlisting>
{* in index.tpl *}
Anfragen bitte an
{mailto address=$EmailAddress encode="javascript" subject="Hallo"}
senden
</programlisting>
</example>
<note>
<title>Technische Details</title>
<para>
Die Codierung mit Javascript ist nicht sehr sicher, da ein
möglicher Spammer die Decodierung in sein Sammelprogramm
einbauen könnte. Es wird jedoch damit gerechnet, dass, da
Aufwand und Ertrag sich nicht decken, dies nicht oft der Fall
ist.
</para>
</note>
<para>
Siehe auch <link linkend="language.modifier.escape">escape</link>
und <link linkend="language.function.mailto">{mailto}</link>.
</para>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,77 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<chapter id="troubleshooting">
<title>Probleml&ouml;sung</title>
<para></para>
<sect1 id="smarty.php.errors">
<title>Smarty/PHP Fehler</title>
<para>
Smarty kann verschiedene Fehler-Typen, wie fehlende Tag-Attribute
oder syntaktisch falsche Variablen-Namen abfangen. Wenn dies
geschieht, wird Ihnen eine Fehlermeldung ausgegeben. Beispiel:
</para>
<example>
<title>Smarty Fehler</title>
<screen>
<![CDATA[
Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
in /path/to/smarty/Smarty.class.php on line 1041
Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
in /path/to/smarty/Smarty.class.php on line 1041</programlisting>
]]>
</screen>
</example>
<para>
In der ersten Zeile zeigt Smarty den Template-Namen, die
Zeilennummer und den Fehler an. Darauf folgt die betroffene Zeile
in der Smarty Klasse welche den Fehler erzeugt hat.
</para>
<para>
Es gibt gewisse Fehlerkonditionen, die Smarty nicht abfangen kann (bsp: fehlende End-Tags). Diese Fehler
resultieren jedoch normalerweise in einem PHP-'compile-time' Fehler.
</para>
<example>
<title>PHP Syntaxfehler</title>
<screen>
<![CDATA[
Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75</programlisting>
]]>
</screen>
</example>
<para>
Wenn ein PHP Syntaxfehler auftritt, wird Ihnen die Zeilennummer
des betroffenen PHP Skriptes ausgegeben, nicht die des
Templates. Normalerweise k&ouml;nnen Sie jedoch das Template
anschauen um den Fehler zu lokalisieren. Schauen sie insbesondere
auf Folgendes: fehlende End-Tags in einer {if}{/if} Anweisung oder
in einer {section}{/section} und die Logik eines {if}
Blocks. Falls Sie den Fehler so nicht finden, k&ouml;nnen Sie auch
das kompilierte Skript &ouml;ffnen und zu der betreffenden
Zeilennummer springen um herauszufinden welcher Teil des Templates
den Fehler enth&auml;lt.
</para>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,47 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: andreas Status: ready -->
<bookinfo id="bookinfo">
<title>Smarty - die kompilierende PHP Template-Engine</title>
<authorgroup id="authors">
<author>
<firstname>Monte</firstname><surname>Ohrt &lt;monte at ohrt dot com&gt;</surname>
</author>
<author>
<firstname>Andrei</firstname><surname>Zmievski &lt;andrei@php.net&gt;</surname>
</author>
</authorgroup>
<authorgroup id="translators">
<author>
<firstname>Andreas</firstname><surname>Halter &lt;smarty@andreashalter.ch&gt; (Deutsche &Uuml;bersetzung)</surname>
</author>
<author>
<firstname>Thomas</firstname><surname>Schulz &lt;ths@4bconsult.de&gt; (Review der deutschen &Uuml;bersetzung)</surname>
</author>
</authorgroup>
<pubdate>&build-date;</pubdate>
<copyright>
<year>2001-2005</year>
<holder>New Digital Group, Inc.</holder>
</copyright>
</bookinfo>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,73 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: andreas Status: ready -->
<chapter id="chapter.debugging.console">
<title>Debugging Konsole</title>
<para>
Smarty wird mit einer eingebauten Debugging Konsole
ausgeliefert. Diese Konsole informiert über die im aufgerufenen
Template <link
linkend="language.function.include">eingebundenen</link> Templates,
die <link linkend="api.assign">zugewiesenen</link> Variablen und die
<link
linkend="language.config.variables">Konfigurations-Variablen</link>.
Die Formatierung der Konsole wird über das Template <link
linkend="variable.debug.tpl">debug.tpl</link> gesteuert. Um
debugging zu aktivieren, setzten Sie <link
linkend="variable.debugging">$debugging</link> auf 'true' und (falls
nötig) übergeben in <link
linkend="variable.debug.tpl">$debug_tpl</link> den Pfad zum
Debugtemplate (normalerweise <link
linkend="constant.smarty.dir">SMARTY_DIR</link>debug.tpl). Wenn Sie
danach eine Seite laden, sollte ein Javascript-Fenster geöffnet
werden in welchem Sie alle Informationen zur aufgerufenen Seite
finden. Falls Sie die Variablen eines bestimmten Templates ausgeben
wollen, können Sie dazu die Funktion <link
linkend="language.function.debug">{debug}</link> verwenden. Um
debugging auszuschalten, können Sie <link
linkend="variable.debugging">$debugging</link> auf 'false' setzen.
Sie können debugging auch temporär aktivieren, in dem Sie der
aufgerufenen URL SMARTY_DEBUG mit übergeben, dies muss jedoch
zuerst mit <link
linkend="variable.debugging.ctrl">$debugging_ctrl</link> aktiviert
werden.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Die Debugging Konsole funktioniert nicht für Daten die via <link
linkend="api.fetch">fetch()</link> geladen wurden, sondern nur
für Daten die via <link linkend="api.display">display()</link>
ausgegeben werden. Die Konsole besteht aus ein paar Zeilen
Javascript welche am Ende jeder Seite eingefügt werden. Wenn
Sie Javascript nicht mögen, können Sie die Ausgabe in
'debug.tpl' selbst definieren. Debug-Ausgaben werden nicht gecached
und Informationen zu 'debug.tpl' selbst werden nicht ausgegeben.
</para>
</note>
<note>
<para>
Die Ladezeiten werden in Sekunden, oder Bruchteilen davon, angegeben.
</para>
</note>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,110 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: andreas Status: ready -->
<chapter id="config.files">
<title>Konfigurationsdateien</title>
<para>
Konfigurationsdateien sind ein praktischer Weg um Template-Variablen
aus einer gemeinsamen Datei zu lesen. Ein Beispiel sind die
Template-Farben. Wenn Sie die Farben einer Applikation anpassen
wollen, müssen Sie normalerweise alle Templates durcharbeiten,
und die entsprechenden Werte ändern. Mit einer
Konfigurationsdatei können Sie alle Definitionen in einer
einzigen Datei vornehmen, und somit auch einfach ändern.
</para>
<example>
<title>Beispiel der Konfigurationsdatei-Syntax</title>
<programlisting>
<![CDATA[
# global variables
pageTitle = "Main Menu"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
[Customer]
pageTitle = "Customer Info"
[Login]
pageTitle = "Login"
focus = "username"
Intro = """Diese Zeile erstreckt sich über
mehrere Zeilen, und muss deswegen
mit dreifachen Anführungszeichen
umschlossen werden."""
# hidden section
[.Database]
host=my.example.com
db=ADDRESSBOOK
user=php-user
pass=foobar
]]></programlisting>
</example>
<para>
<link linkend="language.config.variables">Die Werte in einer
Konfigurationsdatei</link> können in einfachen/doppelten
Anführungszeichen notiert werden. Falls Sie einen Wert haben der
sich über mehrere Zeilen ausbreitet muss dieser Wert in
dreifachen Anführungszeichen (""") eingebettet werden. Die
Kommentar-Syntax kann frei gewählt werden, solange sie nicht der
normalen Syntax entsprechen. Wir empfehlen die Verwendung von
<literal>#</literal> (Raute) am Anfang jeder Kommentar-Zeile.
</para>
<para>
Dieses Beispiel hat 2 'sections'. 'section'-Namen werden von
[]-Zeichen umschlossen und können alle Zeichen ausser
<literal>[</literal> und <literal>]</literal> enthalten. Die vier
Variablen welche am Anfang der Datei definiert werden sind globale
Variablen. Diese Variablen werden immer geladen. Wenn eine
definierte 'section' geladen wird, werden also die globalen
Variablen ebenfalls eingelesen. Wenn eine Variable sowohl global als
auch in einer 'section' vorkommt, wird die 'section'-Variable
verwendet. Wenn zwei Variablen in der gleichen 'section' den selben
Namen aufweisen wird die Letztere verwendet, es sei denn <link
linkend="variable.config.overwrite">$config_overwrite</link> ist
deaktiviert ('false').
</para>
<para>
Konfigurationsdateien werden mit <link
linkend="language.function.config.load"><command>config_load</command></link>
geladen.
</para>
<para>
Sie können Variablen oder auch ganze 'sections' verstecken indem
Sie dem Namen ein '.' voranstellen. Dies ist besonders wertvoll wenn
Ihre Applikation sensitive Informationen aus der Konfigurationsdatei
liest welche von der Template-Engine nicht verwendet werden. Falls
eine Drittpartei eine Änderung an der Konfigurationsdatei
vornimmt können Sie so sicherstellen, dass die sensitiven Daten
nicht in deren Template geladen werden können.
</para>
<para>
Siehe auch: <link
linkend="language.function.config.load">{config_load}</link>, <link
linkend="variable.config.overwrite">$config_overwrite</link>, <link
linkend="api.get.config.vars">get_config_vars()</link>, <link
linkend="api.clear.config">clear_config()</link> und <link
linkend="api.config.load">config_load()</link>
</para>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<chapter id="language.basic.syntax">
<title>Grundlegende Syntax</title>
<para>
Alle Smarty Template-Tags werden mit Trennzeichen umschlossen. Normalerweise
sind dies: <literal>{</literal> und <literal>}</literal>, sie können aber
auch <link linkend="variable.left.delimiter">verändert</link> werden.
</para>
<para>
Für die folgenden Beispiele wird davon ausgegangen, dass Sie die
Standard-Trennzeichen verwenden. Smarty erachtet alle Inhalte ausserhalb
der Trennzeichen als statisch und unveränderbar. Sobald Smarty
auf Template-Tags stösst, versucht es diese zu interpretieren und die
entsprechenden Ausgaben an deren Stelle einzufügen.
</para>
&designers.language-basic-syntax.language-syntax-comments;
&designers.language-basic-syntax.language-syntax-variables;
&designers.language-basic-syntax.language-syntax-functions;
&designers.language-basic-syntax.language-syntax-attributes;
&designers.language-basic-syntax.language-syntax-quotes;
&designers.language-basic-syntax.language-math;
&designers.language-basic-syntax.language-escaping;
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,92 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: messju Status: ready -->
<sect1 id="language.escaping">
<title>Smarty Parsing umgehen</title>
<para>
Manchmal ist es wünschenswert, dass Smarty Teile eines
Templates nicht parst. Dies ist zum Beispiel der Fall, wenn
Javascript oder CSS im Template eingebettet werden. Da diese
Sprachen selbst { und } nutzen, erkennt Smarty diese als Start-
beziehungsweise End-Tags.
</para>
<para>
Der einfachste Weg, dieses Problem zu umgehen, ist das Auslagern des
betreffenden Javascript oder CSS Codes in eigene Dateien.
</para>
<para>
Um solche Inhalte trotzdem im gleichen Template einzubetten, können
Sie <link linkend="language.function.literal">{literal}
.. {/literal}</link> Blöcke verwenden. Die aktuell benutzten
Trennzeichen können Sie mit <link
linkend="language.function.ldelim">{ldelim}</link>, <link
linkend="language.function.ldelim">{rdelim}</link>, <link
linkend="language.variables.smarty.ldelim">{$smarty.ldelim}</link>
und <link linkend="language.variables.smarty.ldelim">{$smarty.rdelim}</link>
ausgeben.
</para>
<para>
Manchmal ist es auch einfacher, die Trennzeichen selbst zu ändern:
<link linkend="variable.left.delimiter">$left_delimiter</link> und
<link linkend="variable.right.delimiter">$right_delimiter</link>
definieren diese.
</para>
<example>
<title>Beispiel wie die Trennzeichen angepasst werden</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty = new Smarty;
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
$smarty->display('example.tpl');
?>
]]>
</programlisting>
<para>
example.tpl würde somit wie folgt aussehen:
</para>
<programlisting>
<![CDATA[
Willkommen bei Smarty, <!--{$name}-->!
<script language="javascript">
var foo = <!--{$foo}-->;
function dosomething() {
alert("foo is " + foo);
}
dosomething();
</script>
]]>
</programlisting>
</example>
<para>
Siehe auch: <link linkend="language.modifier.escape">Escape Modifikator</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,54 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<sect1 id="language.math">
<title>Math</title>
<para>
Mathematische Operationen k&ouml;nnen direkt auf Variablen verwendet werden.
</para>
<example>
<title>Mathematik Beispiele</title>
<programlisting>
<![CDATA[
{$foo+1}
{$foo*$bar}
{* kompliziertere Beispiele *}
{$foo-&gt;bar-$bar[1]*$baz-&gt;foo-&gt;bar()-3*7}
{if ($foo+$bar.test%$baz*134232+10+$b+10)}
{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}
{assign var="foo" value="`$foo+$bar`"}
]]>
</programlisting>
</example>
<para>
Siehe auch die <link linkend="language.function.math">{math}-Funktion</link>
für komplexere Berechnungen.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,64 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: messju Status: ready -->
<sect1 id="language.syntax.attributes">
<title>Attribute / Parameter</title>
<para>
Die meisten Funktionen nehmen Parameter entgegen, die das Verhalten
der Funktion definieren beziehungsweise beeinflussen. Parameter
f&uuml;r Smarty <link
linkend="language.syntax.functions">Funktionen</link> sind HTML
Attributen sehr &auml;hnlich. Statische Werte m&uuml;ssen nicht in
Anf&uuml;hrungszeichen gesetzt werden, f&uuml;r literale
Zeichenketten (literal strings) wird dies jedoch empfohlen.
</para>
<para>
Bestimmte Parameter verlangen logische Werte (true / false). Diese
k&ouml;nnen auch ohne Anf&uuml;hrungszeichen angegeben werden:
<literal>true</literal>, <literal>on</literal> und
<literal>yes</literal> - oder <literal>false</literal>,
<literal>off</literal> und <literal>no</literal>.
</para>
<example>
<title>Funktions-Parameter Syntax</title>
<programlisting>
<![CDATA[
{include file='header.tpl'}
{include file='header.tpl' attrib_name='attrib value'}
{include file=$includeFile}
{include file=#includeFile#}
{html_select_date display_days=yes}
{mailto address='smarty@example.com'}
<select name=firma>
{html_options values=$vals selected=$selected output=$output}
</select>
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<sect1 id="language.syntax.comments">
<title>Kommentare</title>
<para>
Kommentare werden von Asterisks umschlossen, und mit <link
linkend="variable.left.delimiter">Trennzeichen</link> umgeben.
Beispiel: {* das ist ein Kommentar *} Smarty-Kommentare werden in
der Ausgabe nicht dargestellt und vor allem dazu verwendet, die
Templates verst&auml;ndlicher aufzubauen. Smarty Kommentare werden
sind in der engültigen Ausgabe NICHT dargestellt. (im Gegensatz zu
&lt;!-- HTML Kommentaren --&gt;). Sie sind nützlich um in den
Templates interne Anmerkungen zu hinterlassen.
</para>
<example>
<title>Kommentare</title>
<programlisting>
<![CDATA[
<body>
{* Dies ist ein einzeiliger Kommentar *}
{* dies ist ein mehrzeiliger
Kommentar, der nicht zum
Browser gesandt wird.
*}
</body>
{* einbinden des Header-Templates *}
{include file="header.tpl"}
{* Entwicklernotiz: $includeFile wurde in 'foo.php' zugewiesen *}
{include file=$includeFile}
{include file=#includeFile#}
{* Ausgabe der drop-down Liste *}
{* Dieser <select> Block ist überflüssig *}
{*
<select name=firma>
{html_options options=$vals selected=$selected}
</select>
*}
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<sect1 id="language.syntax.functions">
<title>Funktionen</title>
<para>
Jedes Smarty-Tag gibt entweder eine <link
linkend="language.variables">Variable</link> aus oder ruft eine
Funktion auf. Funktionen werden aufgerufen indem der Funktionsname
und die <link linkend="language.syntax.attributes">Parameter</link>
mit Trennzeichen umschlossen werden. Beispiel: {funcname attr1="val"
attr2="val"}.
</para>
<example>
<title>Funktions-Syntax</title>
<programlisting>
<![CDATA[
{config_load file="colors.conf"}
{include file="header.tpl"}
{if $highlight_name}
Welcome, <font color="{#fontColor#}">{$name}!</font>
{else}
Welcome, {$name}!
{/if}
{include file="footer.tpl"}
]]>
</programlisting>
</example>
<para>
Sowohl der Aufruf von <link
linkend="language.builtin.functions">eingebauten</link>, als auch
der von e<link linkend="language.custom.functions">igenen</link>
Funktionen folgt der gleichen Syntax.
</para>
<para>
Eingebaute Funktionen erlauben einige <emphasis
role="bold">Basis</emphasis>-Operationen wie <link
linkend="language.function.if">if</link>, <link
linkend="language.function.section">section</link> und <link
linkend="language.function.strip">strip</link>. Diese Funktionen
können nicht verändert werden.
</para>
<para>
Individuelle Funktionen die die Fähigkeiten von Smarty erweitern
werden als Plugins implementiert. Diese Funktionen können von Ihnen
angepasst werden, oder Sie können selbst neue Plugins
hinzufügen. <link
linkend="language.function.html.options">{html_options}</link> und
<link
linkend="language.function.html.select.date">{html_select_date}</link>
sind Beispiele solcher Funktionen.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,57 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<sect1 id="language.syntax.quotes">
<title>Variablen mit Doppelten Anführungszeichen</title>
<para>
Smarty erkennt <link linkend="api.assign">zugewiesene</link> <link
linkend="language.syntax.variables">Variablen</link> mit doppelten
Anführungszeichen solange die Variablen nur Zahlen, Buchstaben,
Understriche oder Klammern [] enthalten. Mit allen anderen Zeichen
wie Punkt, Objekt Referenzen, etc muss die Vairable mit Backticks
(``) umschlossen sein.
</para>
<example>
<title>Syntax von eingebetteten Anfürungszeichen</title>
<programlisting>
<![CDATA[
SYNTAX BEISPIELE:
{func var="test $foo test"} &lt;-- sieht $foo
{func var="test $foo_bar test"} &lt;-- sieht $foo_bar
{func var="test $foo[0] test"} &lt;-- sieht $foo[0]
{func var="test $foo[bar] test"} &lt;-- sieht $foo[bar]
{func var="test $foo.bar test"} &lt;-- sieht $foo (nicht $foo.bar)
{func var="test `$foo.bar` test"} &lt;-- sieht $foo.bar
{func var="test `$foo.bar` test"|escape} <-- Modifikatoren ausserhalb der Anführungsz.!
PRAKTISCHE BEISPIELE:
{include file="subdir/$tpl_name.tpl"} &lt;-- ersetzt $tpl_name durch wert
{cycle values="one,two,`$smarty.config.myval`"} &lt;-- muss Backticks enthalten</programlisting>
]]>
</programlisting>
</example>
<para>
Siehe auch <link linkend="language.modifier.escape">escape (Maskieren)</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: andreas Status: ready -->
<sect1 id="language.syntax.variables">
<title>Variablen</title>
<para>
Templatevariablennamen beginnen mit einem $dollar-Zeichen. Sie
können Ziffer, Buchstaben und Unterstriche ('_') enthalten, sehr
ähnlich den <ulink
url="&url.php-manual;language.variables">Variablen in PHP</ulink>.
Numerische Arrayindizes können referenziert werden und auch
Nichtnumerische. Zugriff auf Objekteigenschaften und -methoden ist
auch möglich.
<link
linkend="language.config.variables">Konfigurationsvariablen</link>
sind einer Ausname was die Dollarzeichen-Syntax angeht. Diese werden
durch umgebende #Doppelkreuze# oder über die Varible <link
linkend="language.variables.smarty.config">$smarty.config</link>
referenziert.
</para>
<example>
<title>Variablen</title>
<programlisting>
<![CDATA[
{$foo} <-- Zeigt einfache Variable an (kein Array oder Objekt)
{$foo[4]} <-- Zeigt 5. Element von einem Array an, deren Schlussel bei 0 beginnen
{$foo.bar} <-- Zeigt das Element zum Schlüssel "bar" des Arrays an (wie PHPs $foo['bar'])
{$foo.$bar} <-- Zeigt das Element eines variablen Schlüssels an (wie PHPs $foo[$bar])
{$foo->bar} <-- Zeigt eine Eigenschaft "bar" des Objekts $foo an
{$foo->bar()} <-- Zeigt den Rückgabewert der Objectmethode "bar" an
{#foo#} <-- Zeift die Konfigurationsvariable "foo" an
{$smarty.config.foo} <-- Synonym für {#foo#}
{$foo[bar]} <-- Syntax zum zugriff auf Element in einer Section-Schleife, siehe {section}
{assign var=foo value="baa"}{$foo} <-- Gibt "baa" aus, siehe {assign}
Viele weitere Kombinationen sind erlaubt
{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
{$foo->bar($baz,2,$bar)} <-- Parameter übergeben
{"foo"} <-- Statische (konstante) Werte sind auch erlaubt
]]>
</programlisting>
</example>
<para>
Siehe auch: <link linkend="language.variables.smarty">Die reservierte
{$smarty} Variable</link> und <link
linkend="language.config.variables">Verwendung von Variablen aus
Konfigurationsdateien</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<chapter id="language.builtin.functions">
<title>Eingebaute Funktionen</title>
<para>
Smarty enth&auml;lt eine Reihe eingebauter Funktionen. Eingebaute Funktionen
sind integral f&uuml;r die Template-Sprache. Sie k&ouml;nnen sie weder
ver&auml;ndern noch eigene Funktionen unter selbem Namen erstellen.
</para>
&designers.language-builtin-functions.language-function-capture;
&designers.language-builtin-functions.language-function-config-load;
&designers.language-builtin-functions.language-function-foreach;
&designers.language-builtin-functions.language-function-if;
&designers.language-builtin-functions.language-function-include;
&designers.language-builtin-functions.language-function-include-php;
&designers.language-builtin-functions.language-function-insert;
&designers.language-builtin-functions.language-function-ldelim;
&designers.language-builtin-functions.language-function-literal;
&designers.language-builtin-functions.language-function-php;
&designers.language-builtin-functions.language-function-section;
&designers.language-builtin-functions.language-function-strip;
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,129 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: andreas Status: ready -->
<sect1 id="language.function.capture">
<title>{capture} (Ausgabe abfangen)</title>
<para>
{capture} wird verwendet, um die Template-Ausgabe abzufangen und in
einer Variable zu speichern. Der Inhalt zwischen {capture
name="foo"} und {/capture} wird unter der im 'name' Attribut
angegebenen Capture-Variablen abgelegt und kann über <link
linkend="language.variables.smarty.capture">$smarty.capture.foo</link>
angesprochen werden. Falls kein 'name'-Attribut übergeben wurde,
wird der Inhalt in 'default' (also $smarty.capture.default)
abgelegt. Jede {capture} Sektion muss mit {/capture} beendet
werden. {capture}-Blöcke können verschachtelt sein.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Benötigt</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>no</entry>
<entry><emphasis>default</emphasis></entry>
<entry>Der Name des abgefangenen Blocks</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Name der Variable welcher der Wert zugewiesen werden soll.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<caution>
<para>
Seien Sie vorsichtig, wenn sie die Ausgabe von <link
linkend="language.function.insert">{insert}</link> abfangen
wollen. Sie sollten die Ausgabe nicht abfangen, wenn Caching
eingeschaltet ist und Sie einen <link
linkend="language.function.insert">{insert}</link> Befehl
verwenden, um Ausgaben vom Caching auszuschliessen.
</para>
</caution>
<para>
<example>
<title>Template-Inhalte abfangen</title>
<programlisting>
<![CDATA[
{* Tabellenzeile nur ausgeben, wenn Inhalt vorhanden *}
{capture name=banner}
{include file='get_banner.tpl'}
{/capture}
{if $smarty.capture.banner ne ""}
<table>
<tr>
<td>
{$smarty.capture.banner}
</td>
</tr>
</table>
{/if}
]]>
</programlisting>
</example>
<example>
<title>Template-Inhalte abfangen</title>
<para>
Hier ist ein Beispiel das das Zusammenspiel mit der Funktion <link
linkend="language.function.popup">{popup}</link> demonstriert.
</para>
<programlisting>
<![CDATA[
{capture name=some_content assign=popText}
.... some content ....
{/capture}
<a href="#" {popup caption='Help' text=$popText}>help</a>
]]>
</programlisting>
</example>
</para>
<para>
Siehe auch:
<link
linkend="language.variables.smarty.capture">$smarty.capture</link>,
<link linkend="language.function.eval">{eval}</link>,
<link linkend="language.function.fetch">{fetch}</link>,
<link linkend="api.fetch">fetch()</link>
and <link linkend="language.function.assign">{assign}</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,180 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.11 Maintainer: andreas Status: ready -->
<sect1 id="language.function.config.load">
<title>{config_load} (Konfiguration laden)</title>
<para>
Diese Funktion wird verwendet, um <link
linkend="language.config.variables">Variablen aus einer
Konfigurationsdatei</link> in das Template zu laden. Sehen sie
<link linkend="config.files">Config Files
(Konfigurationsdateien)</link> für weitere Informationen.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Definiert den Namen der einzubindenden Datei.</entry>
</row>
<row>
<entry>section</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Definiert den Namen des zu ladenden Abschnitts.</entry>
</row>
<row>
<entry>scope</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>local</emphasis></entry>
<entry>
Definiert den Geltungsbereich der zu ladenden Variablen.
Erlaubte Werte sind 'local','parent' und 'global'. 'local'
bedeutet, dass die Variablen in den Context des lokalen Template
geladen werden. 'parent' bedeutet, dass die Variablen sowohl in
den lokalen Context, als auch in den Context des aufrufenden
Templates eingebunden werden. 'global' bedeutet, dass die
Variablen von allen Templates zugänglich sind.
</entry>
</row>
<row>
<entry>global</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>No</emphasis></entry>
<entry>
Definiert, ob die Variablen von allen Templates aus zugänglich
sind. WICHTIG: Dieses Attribut wird von 'scope' abgelöst und
sollte nicht mehr verwendet werden. Falls 'scope' übergeben
wurde, wird 'global' ignoriert.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>Funktion {config_load}</title>
<para>
beispiel.conf
</para>
<programlisting>
<![CDATA[
#Dies ist ein Konfigurationsdateikommentar
# globale Variablen
seitenTitel = "Hauptmenü"
bodyHintergrundFarbe = #000000
tabelleHintergrundFarbe = #000000
reiheHintergrundFarbe = #00ff00
# Kundenvariablen
[Kunden]
seitenTitel = "Kundeninfo"
]]>
</programlisting>
<para>and the template</para>
<programlisting>
<![CDATA[
{config_load file='example.conf'}
<html>
<title>{#seitenTitel#}</title>
<body bgcolor="{#bodyHintergrundFarbe#}">
<table border="{#tabelleRahmenBreite#}" bgcolor="{#tabelleHintergrundFarbe#}">
<tr bgcolor="{#reiheHintergrundFarbe#}">
<td>Vornamen</td>
<td>Nachnamen</td>
<td>Adresse</td>
</tr>
</table>
</body>
</html>
]]>
</programlisting>
</example>
<para>
<link linkend="config.files">Konfigurationsdateien</link> können
Abschnitte enthalten. Um Variablen aus einem Abschnitt zu laden,
können Sie das Attribut <emphasis>section</emphasis> übergeben.
</para>
<para>
Bemerkung: <emphasis>Konfigurationdatei-Abschnitte
(sections)</emphasis> und die eingebaute Template Funktion namens
<link linkend="language.function.section">section</link> haben ausser
dem Namen nichts gemeinsam.
</para>
<example>
<title>Funktion {config_load} mit Abschnitten</title>
<programlisting>
<![CDATA[
{config_load file="beispiel.conf" section="Kunde"}
<html>
<title>{#seitenTitel#}</title>
<body bgcolor="{#bodyHintergrundFarbe#}">
<table border="{#tabelleRahmenBreite#}" bgcolor="{#tabelleHintergrundFarbe#}">
<tr bgcolor="{#reiheHintergrundFarbe#}">
<td>Vornamen</td>
<td>Nachnamen</td>
<td>Adresse</td>
</tr>
</table>
</body>
</html>
]]>
</programlisting>
</example>
<para>
Siehe <link
linkend="variable.config.overwrite">$config_overwrite</link>
bezüglich Arrays von Konfigurationsvariablen.
</para>
<para>
Siehe auch <link
linkend="config.files">Konfigurationsdateien</link>, <link
linkend="language.config.variables">Variablen aus
Konfigurationsdateien</link>, <link
linkend="variable.config.dir">$config_dir</link>, <link
linkend="api.get.config.vars">get_config_vars()</link> und <link
linkend="api.config.load">config_load()</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,235 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: andreas Status: ready -->
<sect1 id="language.function.foreach">
<title>{foreach}, {foreachelse}</title>
<para>
Die <emphasis>foreach</emphasis> Schleife ist eine Alternative zu
<link
linkend="language.function.section"><emphasis>section</emphasis></link>.
<emphasis>foreach</emphasis> wird verwendet, um ein assoziatives
Array zu durchlaufen. Die Syntax von
<emphasis>foreach</emphasis>-Schleifen ist viel einfacher als die
von <emphasis>section</emphasis>. <emphasis>{foreach}</emphasis>
Tags müssen mit <emphasis>{/foreach}</emphasis> tags kombiniert
werden. Erforderliche Parameter sind: <emphasis>from</emphasis> und
<emphasis>item</emphasis>. Der Name der {foreach}-Schleife kann
frei vergeben werden und sowohl Buchstaben, Zahlen als auch
Unterstriche enthalten. <emphasis>foreach</emphasis>-Schleifen
können verschachtelt werden, dabei ist zu beachten, dass sich die
definierten Namen voneinander unterscheiden. Die
<emphasis>from</emphasis> Variable (normalerweise ein assoziatives
Array) definiert die Anzahl der von <emphasis>foreach</emphasis> zu
durchlaufenen Iterationen. <emphasis>foreachelse</emphasis> wird
ausgeführt wenn keine Werte in der <emphasis>from</emphasis>
Variable übergeben wurden.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>from</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Name des zu durchlaufenden Array.</entry>
</row>
<row>
<entry>item</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Name für das aktuelle Element.</entry>
</row>
<row>
<entry>key</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Name für den aktuellen Schlüssel.</entry>
</row>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Name der 'foreach'-Schleife, für die Abfrage der 'foreach'-Eigenschaften.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{foreach} - item</title>
<programlisting role="php">
<![CDATA[
<?php
$arr = array( 1001,1002,1003);
$smarty->assign('custid', $arr);
?>
]]>
</programlisting>
<programlisting>
<![CDATA[
<?php
{* dieses Beispiel gibt alle Werte aus dem $KundenId Array aus *}
{foreach from=$KundenId item=aktuelle_id}
id: {$aktuelle_id}<br>
{/foreach}
]]>
</programlisting>
<para>
Das obige Beispiel erzeugt folgende Ausgabe:
</para>
<screen>
<![CDATA[
id: 1000<br>
id: 1001<br>
id: 1002<br>
]]>
</screen>
</example>
<example>
<title>{foreach} - item und key</title>
<programlisting role="php">
<![CDATA[
// Der Schlüssel enthält den Schlüssel des jeweils iterierten Wertes
// die Zuweisung sieht wie folgt aus:
<?php
$smarty->assign('kontakte', array(
array('phone' => '1',
'fax' => '2',
'cell' => '3'),
array('phone' => '555-4444',
'fax' => '555-3333',
'cell' => '760-1234')
));
?>
]]>
</programlisting>
<programlisting>
<![CDATA[
{foreach name=aussen item=kontakt from=$kontakte}
<hr />
{foreach key=schluessel item=wert from=$kontakt}
{$schluessel}: {$wert}<br>
{/foreach}
{/foreach}
</programlisting>
<para>
Das obige Beispiel erzeugt folgende Ausgabe:
</para>
<screen>
<![CDATA[
<hr />
phone: 1<br>
fax: 2<br>
cell: 3<br>
<hr />
phone: 555-4444<br>
fax: 555-3333<br>
cell: 760-1234<br>
]]>
</programlisting>
</example>
<example>
<title>{foreach} - Beispiel mit Datenbankzugriff (z.B. PEAR oder ADODB)</title>
<programlisting role="php">
<![CDATA[
<?php
$sql = 'SELECT contact_id, name, nick FROM contacts ORDER BY contact';
$smarty->assign('kontakte', $db->getAssoc($sql));
?>
]]>
</programlisting>
<programlisting>
<![CDATA[
{foreach key=cid item=con from=$kontakte}
<a href="kontact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
{/foreach}
]]>
</programlisting>
</example>
<para>
Foreach-Loops haben auch eigene Variablen welche die Foreach
Eigenschaften enthalten. Diese werden wie folgt ausgewiesen:
{$smarty.foreach.foreachname.varname}. foreachname ist der Name der
als <emphasis>name</emphasis> Attribut von Foreach übergeben wurden.
</para>
<sect2 id="foreach.property.iteration">
<title>iteration</title>
<para>
gibt die aktuelle iteration aus
</para>
<para>
iteration beginnt immer mit 1 und wird danach bei jedem durchgang um 1 inkrementiert.
</para>
</sect2>
<sect2 id="foreach.property.first">
<title>first</title>
<para>
<emphasis>first</emphasis> ist TRUE wenn die aktuelle Iteration die erste ist
</para>
</sect2>
<sect2 id="foreach.property.last">
<title>last</title>
<para>
<emphasis>last</emphasis> ist TRUE wenn die aktuelle Iteration die letzte ist
</para>
</sect2>
<sect2 id="foreach.property.show">
<title>show</title>
<para>
<emphasis>show</emphasis> wird als Parameter von foreach verwedet
und ist ein boolscher Wert, TRUE oder FALSE. Auf FALSE wird nichts
ausgegeben und wenn foreachelse gefunden wird, dieser angezeigt.
</para>
</sect2>
<sect2 id="foreach.property.total">
<title>total</title>
<para>
<emphasis>total</emphasis> gibt die Anzahl Iterationen des Foreach
Loops aus und kann in- oder nach- Foreach Blöcken verwendet werden.
</para>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,253 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: andreas Status: ready -->
<sect1 id="language.function.if">
<title>{if},{elseif},{else}</title>
<para>
<emphasis>{if}</emphasis>-Statements in Smarty erlauben die selbe
Flexibilität wie in PHP, bis auf ein paar Erweiterungen für die
Template-Engine. Jedes <emphasis>{if}</emphasis> muss mit einem
<emphasis>{/if}</emphasis> kombiniert
sein. <emphasis>{else}</emphasis> und <emphasis>{elseif}</emphasis>
sind ebenfalls erlaubt. Alle PHP Vergleichsoperatoren und Funktionen, wie
<emphasis>||</emphasis>, <emphasis>or</emphasis>,
<emphasis>&amp;&amp;</emphasis>, <emphasis>and</emphasis>,
<emphasis>is_array()</emphasis>, etc. sind erlaubt.
</para>
<para>
Wenn <link linkend="variable.security">$security</link> angeschaltet
wurde, dann müssen alle verwendeten PHP-Funktionen im
<emphasis>IF_FUNCS</emphasis>-Array in dem <link
linkend="variable.security.settings">$security_settings</link>-Array
deklariert werden.
</para>
<para>
Hier eine Liste der erlaubten Operatoren. Bedingungsoperatoren
müssen von umgebenden Elementen mit Leerzeichen abgetrennt werden.
PHP-Äquivalente sind, sofern vorhanden, angeben.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="Operator" align="center" />
<colspec colname="Alternativen" align="center" />
<colspec colname="Syntax Beispiel" />
<colspec colname="Bedeutung" />
<colspec colname="PHP Äquivalent" />
<thead>
<row>
<entry>Operator</entry>
<entry>Alternativen</entry>
<entry>Syntax Beispiel</entry>
<entry>Bedeutung</entry>
<entry>PHP Äquivalent</entry>
</row>
</thead>
<tbody>
<row>
<entry>==</entry>
<entry>eq</entry>
<entry>$a eq $b</entry>
<entry>ist gleich</entry>
<entry>==</entry>
</row>
<row>
<entry>!=</entry>
<entry>ne, neq</entry>
<entry>$a neq $b</entry>
<entry>ist ungleich</entry>
<entry>!=</entry>
</row>
<row>
<entry>&gt;</entry>
<entry>gt</entry>
<entry>$a gt $b</entry>
<entry>größer als</entry>
<entry>&gt;</entry>
</row>
<row>
<entry>&lt;</entry>
<entry>lt</entry>
<entry>$a lt $b</entry>
<entry>kleiner als</entry>
<entry>&lt;</entry>
</row>
<row>
<entry>&gt;=</entry>
<entry>gte, ge</entry>
<entry>$a ge $b</entry>
<entry>größer oder gleich</entry>
<entry>&gt;=</entry>
</row>
<row>
<entry>&lt;=</entry>
<entry>lte, le</entry>
<entry>$a le $b</entry>
<entry>kleiner oder gleich</entry>
<entry>&lt;=</entry>
</row>
<row>
<entry>===</entry>
<entry></entry>
<entry>$a === 0</entry>
<entry>identisch</entry>
<entry>===</entry>
</row>
<row>
<entry>!</entry>
<entry>not</entry>
<entry>not $a</entry>
<entry>Negation</entry>
<entry>!</entry>
</row>
<row>
<entry>%</entry>
<entry>mod</entry>
<entry>$a mod $b</entry>
<entry>Modulo</entry>
<entry>%</entry>
</row>
<row>
<entry>is [not] div by</entry>
<entry></entry>
<entry>$a is not div by 4</entry>
<entry>Ist [nicht] teilbar durch</entry>
<entry>$a % $b == 0</entry>
</row>
<row>
<entry>is [not] even</entry>
<entry></entry>
<entry>$a is not even</entry>
<entry>ist [k]eine gerade Zahl</entry>
<entry>$a % 2 == 0</entry>
</row>
<row>
<entry>is [not] even by</entry>
<entry></entry>
<entry>$a is [not] even by $b</entry>
<entry>[k]eine gerade Gruppierung</entry>
<entry>($a / $b) % 2 == 0</entry>
</row>
<row>
<entry>is [not] odd</entry>
<entry></entry>
<entry>$a is not odd</entry>
<entry>ist [k]eine ungerade Zahl</entry>
<entry>$a % 2 != 0</entry>
</row>
<row>
<entry>is [not] odd by</entry>
<entry></entry>
<entry>$a is not odd by $b</entry>
<entry>[k]eine ungerade Gruppierung</entry>
<entry>($a / $b) % 2 != 0</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>if Anweisung</title>
<programlisting>
<![CDATA[
{* ein Beispiel mit 'eq' (gleich) *}
{if $name eq "Fred"}
Willkommen der Herr.
{elseif $name eq "Wilma"}
Willkommen die Dame.
{else}
Willkommen, was auch immer Du sein magst.
{/if}
{* ein Beispiel mit 'or'-Logik *}
{if $name eq "Fred" or $name eq "Wilma"}
...
{/if}
{* das selbe *}
{if $name == "Fred" || $name == "Wilma"}
...
{/if}
{*
die foldende Syntax ist nicht korrekt, da die Elemente welche die
Bedingung umfassen nicht mit Leerzeichen abgetrennt sind
*}
{if $name=="Fred" || $name=="Wilma"}
...
{/if}
{* Klammern sind erlaubt *}
{if ( $anzahl < 0 or $anzahl > 1000 ) and $menge >= #minMengeAmt#}
...
{/if}
{* einbetten von php Funktionsaufrufen ('gt' steht für 'grösser als') *}
{if count($var) gt 0}
...
{/if}
{* Auf "ist array" überprüfen. *}
{if is_array($foo) }
.....
{/if}
{* Auf "ist nicht null" überprüfen. *}
{if isset($foo) }
.....
{/if}
{* testen ob eine Zahl gerade (even) oder ungerade (odd) ist *}
{if $var is even}
...
{/if}
{if $var is odd}
...
{/if}
{if $var is not odd}
...
{/if}
{* testen ob eine Zahl durch 4 teilbar ist (div by) *}
{if $var is div by 4}
...
{/if}
{* testen ob eine Variable gerade ist, gruppiert nach 2
0=gerade, 1=gerade, 2=ungerade, 3=ungerade, 4=gerade, 5=gerade, etc *}
{if $var is even by 2}
...
{/if}
{* 0=gerade, 1=gerade, 2=gerade, 3=ungerade, 4=ungerade, 5=ungerade, etc *}
{if $var is even by 3}
...
{/if}
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,138 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: andreas Status: ready -->
<sect1 id="language.function.include.php">
<title>include_php (PHP-Code einbinden)</title>
<para>
Die Verwendung von {include_php} wird nicht mehr empfohlen, die
gleiche funktionalität kann auch mit <link
linkend="tips.componentized.templates">Template/Script
Komponenten</link> erreicht werden.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Name der einzubindenden PHP-Datei.</entry>
</row>
<row>
<entry>once</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>true</emphasis></entry>
<entry>Definiert ob die Datei mehrmals geladen werden soll, falls sie mehrmals eingebunden wird.</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Name der Variable, der die Ausgabe von include_php zugewiesen wird.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Falls <link linkend="variable.security">Sicherheit</link> aktiviert
ist, muss das einzubindende Skript im <link
linkend="variable.trusted.dir">$trusted_dir</link> Pfad
liegen. {include_php} muss das Attribut 'file' übergeben werden, das
den Pfad - entweder relativ zu <link
linkend="variable.trusted.dir">$trusted_dir</link> oder absolut -
zum Skript enthält.
</para>
<para>
Normalerweise wird ein PHP-Skript nur einmal pro Aufruf geladen,
selbst wenn es mehrfach eingebunden wird. Sie können dieses
Verhalten durch die Verwendung des <emphasis>once</emphasis>
Attributs steuern. Wenn Sie 'once' auf 'false' setzen, wird die
Datei immer wenn sie eingebunden wird auch neu geladen.
</para>
<para>
Optional kann das <emphasis>assign</emphasis> Attribut übergeben
werden. Die Ausgabe von <emphasis>include_php</emphasis> wird dann
nicht direkt eingefügt, sondern in der durch assign benannten
Template-Variable abgelegt.
</para>
<para>
Das Objekt '$smarty' kann in dem eingebundenen PHP-Script über
'$this' angesprochen werden.
</para>
<example>
<title>Funktion include_php</title>
<para>lade_nav.php</para>
<programlisting>
<![CDATA[
<?php
// lade die Variablen aus einer MySQL-Datenbank und weise sie dem Template zu
require_once("MySQL.class.php");
$sql = new MySQL;
$sql->query("select * from site_nav_sections order by name",SQL_ALL);
$this->assign($sections,$sql->record);
?>
]]>
</programlisting>
<para>
Bei folgendem index.tpl:
</para>
<programlisting>
<![CDATA[
{* absoluter Pfad, oder relativ zu '$trusted_dir' *}
{include_php file="/pfad/zu/lade_nav.php"}
{foreach item=$aktuelle_section from=$sections}
<a href="{$aktuelle_section.url}">{$aktuelle_section.name}</a><br>
{/foreach}
]]>
</programlisting>
</example>
<para>
Siehe auch <link
linkend="language.function.include">{include}</link>, <link
linkend="language.function.php">{php}</link>, <link
linkend="language.function.capture">{capture}</link>, <link
linkend="template.resources">Template Ressourcen</link> and <link
linkend="tips.componentized.templates">Template/Script
Komponenten</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,163 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: andreas Status: ready -->
<sect1 id="language.function.include">
<title>include (einbinden)</title>
<para>
{include}-Tags werden verwendet, um andere Templates in das aktuelle
Template einzubinden. Alle Variablen des aktuellen Templates sind
auch im eingebundenen Template verfügbar. Das {include}-Tag muss ein
'file' Attribut mit dem Pfad zum einzubindenden Template enthalten.
</para>
<para>
Optional kann mit dem <emphasis>assign</emphasis> Attribut definiert
werden, in welcher Variable die Ausgabe des mit
<emphasis>include</emphasis> eingebundenen Templates abgelegt werden
soll statt sie auszugeben.
</para>
<para>
Die Werte aller zugewiesenen Variablen werden wiederhergestellt, sobald
ein eingebundenes Template wieder verlassen wurde. Das bedeutet, dass in
einem eingebundenen Template alle Variablen des einbindenden Template
verwendet und verändert werden können, diese Änderungen aber verloren sind,
sobald das {include} abgearbeitet wurde.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Name der Template-Datei, die eingebunden werden soll.</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Variable, welcher der eingebundene Inhalt zugewiesen werden soll.</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>[var typ]</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Variablen welche dem Template lokal übergeben werden sollen.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>function include (einbinden)</title>
<programlisting>
<![CDATA[
<html>
<head>
<title>{$title}</title>
</head>
<body>
{include file='page_header.tpl'}
{* hier kommt der body des Templates *}
{include file="$tpl_name.tpl"} <-- $tpl_name wird durch eine Wert ersetzt
{include file='page_footer.tpl'}
</body>
</html>
]]>
</programlisting>
</example>
<para>
Sie können dem einzubindenden Template Variablen als Attribute
übergeben. Alle explizit übergebenen Variablen sind nur im
Anwendungsbereich (scope) dieses Template
verfügbar. Attribut-Variablen überschreiben aktuelle
Template-Variablen, falls sie den gleichen Namen haben.
</para>
<example>
<title>include-Funktion und Variablen Übergabe</title>
<programlisting>
<![CDATA[
{include file='header.tpl' title='Hauptmenu' table_bgcolor='#c0c0c0'}
{* hier kommt der body des Templates *}
{include file='footer.tpl' logo='http://my.domain.com/logo.gif'}
]]>
</programlisting>
</example>
<para>
Benutzen sie die Syntax von <link
linkend="template.resources">template resources</link>, um Templates
ausserhalb des '$template_dir' einzubinden:
</para>
<example>
<title>Beispiele für Template-Ressourcen bei der 'include'-Funktion</title>
<programlisting>
<![CDATA[
{* absoluter Dateipfad *}
{include file='/usr/local/include/templates/header.tpl'}
{* absoluter Dateipfad (gleich) *}
{include file='file:/usr/local/include/templates/header.tpl'}
{* absoluter Dateipfad unter Windows ("file:"-Prefix MUSS übergeben werden) *}
{include file='file:C:/www/pub/templates/header.tpl'}
{* einbinden aus Template-Ressource namens 'db' *}
{include file='db:header.tpl'}
{* einbinden eines Variablen Templates - z.B. $module = 'contacts' *}
{include file="$module.tpl"}
{*
Dies hier Funktioniert nicht, da Variablen innerhalb einfacher
Anführungszeichen nicht interpoliert werden.
*}
{include file='$module.tpl'}
]]>
</programlisting>
</example>
<para>
Siehe auch
<link linkend="language.function.include.php">{include_php}</link>,
<link linkend="language.function.php">{php}</link>,
<link linkend="template.resources">Template Ressourcen</link> und
<link linkend="tips.componentized.templates">Template/Skript Komponenten</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,146 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<sect1 id="language.function.insert">
<title>insert (einfügen)</title>
<para>
{insert}-Tags funktionieren ähnlich den <link
linkend="language.function.include">{include}</link>-Tags, werden
aber nicht gecached, falls <link linkend="caching">caching</link>
eingeschaltet ist. Sie werden bei jedem Aufruf des Templates
ausgeführt.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Name der Insert-Funktion</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Name der Template-Variable, in der die Ausgabe der 'insert'-Funktion optional abgelegt wird.</entry>
</row>
<row>
<entry>script</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Name des PHP-Skriptes, das vor Aufruf der 'insert'-Funktion eingebunden werden soll.</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>[var typ]</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Variablen die der 'insert'-Funktion übergeben werden sollen.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Stellen Sie sich vor, sie hätten ein Template mit einem
Werbebanner. Dieser Banner kann verschiedene Arten von Inhalten
haben: Bilder, HTML, Flash, etc. Deshalb können wir nicht einfach
einen statischen Link verwenden und müssen vermeiden, dass dieser
Inhalt gecached wird. Hier kommt das {insert}-Tag ins Spiel. Das
Template kennt die Variablen '#banner_location_id#' und '#site_id#'
(zum Beispiel aus einer <link
linkend="config.files">Konfigurationsdatei</link>) und soll eine
Funktion aufrufen, die den Inhalt des Banners liefert.
</para>
<example>
<title>Funktion 'insert'</title>
<programlisting>
{* erzeugen des Banners *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
</programlisting>
</example>
<para>
In diesem Beispiel verwenden wir die Funktion 'getBanner' und
übergeben die Parameter '#banner_location_id#' und '#site_id#'.
Smarty wird daraufhin in Ihrer Applikatiopn nach einer Funktion
namens 'getBanner' suchen und diese mit den Parametern
'#banner_location_id#' und '#site_id#' aufrufen. Allen
'insert'-Funktionen in Ihrer Applikation muss 'insert_'
vorangestellt werden, um Konflikte im Namensraum zu vermeiden. Ihre
'insert_getBanner()'-Funktion sollte etwas mit den übergebenen
Parametern unternehmen und das Resultat zurückgeben. Dieses
Resultat wird an der Stelle des 'insert'-Tags in Ihrem Template
ausgegeben. In diesem Beispiel würde Smarty folgende Funktion
aufrufen: insert_getBanner(array("lid" => "12345","sid" => "67890"))
und die erhaltenen Resultate an Stelle des 'insert'-Tags ausgeben.
</para>
<para>
Falls Sie das 'assign'-Attribut übergeben, wird die Ausgabe des
'insert'-Tags in dieser Variablen abgelegt. Bemerkung: dies ist
nicht sinnvoll, wenn <link linkend="variable.caching">Caching</link>
eingeschaltet ist.
</para>
<para>
Falls Sie das 'script'-Attribut übergeben, wird das angegebene
PHP-Skript vor der Ausführung der {insert}-Funktion eingebunden.
Dies ist nützlich, um die {insert}-Funktion erst in diesem Skript zu
definieren. Der Pfad kann absolut oder relativ zu <link
linkend="variable.trusted.dir">$trusted_dir</link> angegeben werden.
Wenn Sicherheit eingeschaltet ist, muss das Skript in <link
linkend="variable.trusted.dir">$trusted_dir</link> liegen.
</para>
<para>
Als zweites Argument wird der {insert}-Funktion das Smarty-Objekt
selbst übergeben. Damit kann dort auf die Informationen im
Smarty-Objekt zugegriffen werden.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Es gibt die Möglichkeit, Teile des Templates nicht zu cachen. Wenn
Sie <link linkend="caching">caching</link> eingeschaltet haben,
werden {insert}-Tags nicht gecached. Sie werden jedesmal
ausgeführt, wenn die Seite erstellt wird - selbst innerhalb
gecachter Seiten. Dies funktioniert gut für Dinge wie Werbung
(Banner), Abstimmungen, Wetterberichte, Such-Resultate,
Benutzer-Feedback-Ecke, etc.
</para>
</note>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,81 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: andreas Status: ready -->
<sect1 id="language.function.ldelim">
<title>ldelim,rdelim (Ausgabe der Trennzeichen)</title>
<para>
ldelim und rdelim werden verwendet, um die Trennzeichen auszugeben -
in unserem Fall "{" oder "}" - ohne dass Smarty versucht, sie zu
interpretieren. Um text im Template vor dem Interpretieren zu
schützen kann auch <link
linkend="language.function.literal">{literal}{/literal}</link>
verwendet werden. Siehe auch <link
linkend="language.variables.smarty.ldelim">{$smarty.ldelim}</link>.
</para>
<example>
<title>ldelim, rdelim</title>
<programlisting>
<![CDATA[
{* gibt die konfigurierten Trennzeichen des Templates aus *}
{ldelim}funktionsname{rdelim} Funktionen sehen in Smarty so aus!
]]>
</programlisting>
<para>
Das obige Beispiel ergibt als Ausgabe:
</para>
<screen>
<![CDATA[
{funktionsname} Funktionen sehen in Smarty so aus!</programlisting>
]]>
</screen>
<para>
Ein weiteres Beispiel (diesmal mit javascript)
</para>
<programlisting>
<![CDATA[
<script language="JavaScript">
function foo() {ldelim}
... code ...
{rdelim}
</script>
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
<script language="JavaScript">
function foo() {
.... code ...
}
</script>
]]>
</screen>
</example>
<para>
Siehe auch <link linkend="language.escaping">Smarty Parsing umgehen</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,62 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: andreas Status: ready -->
<sect1 id="language.function.literal">
<title>literal</title>
<para>
{literal}-Tags erlauben es, einen Block wörtlich auszugeben,
d.h. von der Interpretation durch Smarty auszuschliessen. Dies ist
vor allem für Javascript- oder andere Blöcke nützlich, die
geschwungene Klammern verwenden. Alles was zwischen den
{literal}{/literal} Tags steht, wird direkt angezeigt. Wenn in
einem {literal}-Block temlate-Tags verwendet werden sollen, is es
manchmal sinnvoller <link
linkend="language.function.ldelim">{ldelim}{rdelim}</link> statt
{literal} zu verwenden.
</para>
<example>
<title>literal-Tags</title>
<programlisting>
<![CDATA[
{literal}
<script language=javascript>
<!--
function isblank(field) {
if (field.value == '') {
return false;
} else {
document.loginform.submit();
return true;
}
}
// -->
</script>
{/literal}
]]>
</programlisting>
</example>
<para>
Siehe auch <link linkend="language.escaping">Smarty Parsing
umgehen</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: andreas Status: ready -->
<sect1 id="language.function.php">
<title>php</title>
<para>
{php}-Tags erlauben es, PHP-Code direkt in das Template
einzubetten. Der Inhalt wird nicht 'escaped', egal wie <link
linkend="variable.php.handling">$php_handling</link> konfiguriert
ist. Dieses Tag ist nur für erfahrene Benutzer gedacht und wird
auch von diesen normalerweise nicht benötigt.
</para>
<example>
<title>{php}-Tags</title>
<programlisting>
<![CDATA[
{php}
// php Skript direkt von Template einbinden
include('/pfad/zu/zeige_weather.php');
{/php}
]]>
</programlisting>
</example>
<note>
<title>Technical Note</title>
<para>
Um auf PHP-Variablen in {php}-Blöcken zugreifen zu können, kann es
nötig sein, die Variable als <ulink
url="&url.php-manual;global">global</ulink> zu deklarieren. Der
{php}-Blöck läuft nämlich nicht in einem globalen Kontext, sondern
im Kontext der method des laufenden $smarty-Objektes.
</para>
</note>
<example>
<title>{php} mit Verwendung von global</title>
<programlisting role="php">
<![CDATA[
{php}
global $foo, $bar;
if($foo == $bar){
// tue irgendwas
}
{/php}
]]>
</programlisting>
</example>
<para>
Siehe auch <link
linkend="variable.php.handling">$php_handling</link>, <link
linkend="language.function.include.php">{include_php}</link>, <link
linkend="language.function.include">{include}</link> und <link
linkend="tips.componentized.templates">Template/Script
Komponenten</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,782 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.14 Maintainer: andreas Status: ready -->
<sect1 id="language.function.section">
<title>section,sectionelse</title>
<para>
Template-{sections} werden verwendet, um durch <emphasis
role="bold">Arrays</emphasis> zu iterieren (ähnlich wie <link
linkend="language.function.foreach">{foreach}</link>). Jedes
<emphasis>section</emphasis>-Tag muss mit einem
<emphasis>/section</emphasis>-Tag kombiniert
werden. <emphasis>name</emphasis> und <emphasis>loop</emphasis> sind
erforderliche Parameter. Der Name der 'section' kann frei gewählt
werden, muss jedoch aus Buchstaben, Zahlen oder Unterstrichen
bestehen. {sections} können verschachtelt werden. Dabei ist zu
beachten, dass sich ihre Namen unterscheiden. Aus der
'loop'-Variable (normalerweise ein Array von Werten) resultiert die
Anzahl der Iterationen, die durchlaufen werden. Wenn ein Wert aus
der 'loop'-Variable innerhalb der {section} ausgegeben werden soll,
muss der 'section-name' umschlossen mit [] angefügt werden.
<emphasis>sectionelse</emphasis> wird ausgeführt, wenn keine Werte
in der 'loop'-Variable enthalten sind.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Name der 'section'</entry>
</row>
<row>
<entry>loop</entry>
<entry>[$variable_name]</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Name des Zählers für die Iterationen.</entry>
</row>
<row>
<entry>start</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>0</emphasis></entry>
<entry>
Definiert die Startposition. Falls ein negativer Wert übergeben
wird, berechnet sich die Startposition ausgehend vom Ende des
Arrays. Wenn zum Beispiel 7 Werte in einem Array enthalten sind
und die Startposition -2 ist, ist die berechnete Startposition
5. Unerlaubte Werte (Werte ausserhalb der Grösse des Arrays)
werden automatisch auf den nächstmöglichen Wert gesetzt.
</entry>
</row>
<row>
<entry>step</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>1</emphasis></entry>
<entry>
Definiert die Schrittweite mit welcher das Array durchlaufen
wird. 'step=2' iteriert durch 0, 2, 4, etc. Wenn ein negativer
Wert übergeben wurde, wird das Array rückwärts durchlaufen.
</entry>
</row>
<row>
<entry>max</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Maximale Anzahl an Iterationen, die Durchlaufen werden.</entry>
</row>
<row>
<entry>show</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>true</emphasis></entry>
<entry>Definiert ob diese 'section' angezeigt werden soll oder nicht.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>section</title>
<programlisting role="php">
<![CDATA[
<?php
$data = array(1000,1001,1002);
$smarty->assign('custid',$data);
?>
]]>
</programlisting>
<programlisting>
<![CDATA[
{* dieses Beispiel gibt alle Werte des $KundenId Arrays aus *}
{section name=kunde loop=$KundenId}
id: {$KundenId[kunde]}<br />
{/section}
{* alle Werte in umgekehrter Reihenfolge ausgeben: *}
{section name=kunde loop=$KundenId step=-1}
id: {$KundenId[kunde]}<br />
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<screen>
<![CDATA[
id: 1000<br />
id: 1001<br />
id: 1002<br />
<hr />
id: 1002<br />
id: 1001<br />
id: 1000<br />
]]>
</screen>
<para>
Ein weiteres Beispiel, diesmal ohne ein zugewiesenes Array.
</para>
<programlisting>
<![CDATA[
{section name=foo start=10 loop=20 step=2}
{$smarty.section.foo.index}
{/section}
<hr />
{section name=bar loop=21 max=6 step=-2}
{$smarty.section.bar.index}
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<screen>
<![CDATA[
10 12 14 16 18
<hr />
20 18 16 14 12 10
]]>
</screen>
</example>
<example>
<title>section loop Variable</title>
<programlisting>
<![CDATA[
{* die 'loop'-Variable definiert nur die Anzahl der Iterationen,
Sie können in dieser 'section' auf jeden Wert des Templates
zugreifen. Dieses Beispiel geht davon aus, dass $KundenId, $Namen und
$Adressen Arrays sind, welche die selbe Anzahl Werte enthalten *}
{section name=kunde loop=$KundenId}
id: {$KundenId[kunde]}<br>
name: {$Namen[kunde]}<br>
address: {$Adressen[kunde]}<br>
<p>
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<screen>
<![CDATA[
id: 1000<br>
name: Peter Müller <br>
adresse: 253 N 45th<br>
<p>
id: 1001<br>
name: Fritz Muster<br>
adresse:: 417 Mulberry ln<br>
<p>
id: 1002<br>
name: Hans Meier<br>
adresse:: 5605 apple st<br>
<p>
]]>
</screen>
</example>
<example>
<title>section names</title>
<programlisting>
<![CDATA[
{*
die 'name'-Variable definiert den Namen der verwendet werden soll,
um Daten aus dieser 'section' zu referenzieren
*}
{section name=meinedaten loop=$KundenId}
<p>
id: {$KundenId[meinedaten]}<br>
name: {$Namen[meinedaten]}<br>
address: {$Adressen[meinedaten]}
</p>
{/section}
]]>
</programlisting>
</example>
<example>
<title>nested sections (verschachtelte 'sections')</title>
<programlisting role="php">
<![CDATA[
<?php
$id = array(1001,1002,1003);
$smarty->assign('custid',$id);
$fullnames = array('John Smith','Jack Jones','Jane Munson');
$smarty->assign('name',$fullnames);
$addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st');
$smarty->assign('address',$addr);
$types = array(
array( 'home phone', 'cell phone', 'e-mail'),
array( 'home phone', 'web'),
array( 'cell phone')
);
$smarty->assign('contact_type', $types);
$info = array(
array('555-555-5555', '666-555-5555', 'john@myexample.com'),
array( '123-456-4', 'www.example.com'),
array( '0457878')
);
$smarty->assign('contact_info', $info);
?>
]]>
</programlisting>
<programlisting>
<![CDATA[
{*
Sections können unbegrenzt tief verschachtelt werden. Mit
verschachtelten 'sections' können Sie auf komplexe Datenstrukturen
zugreifen (wie zum Beispiel multidimensionale Arrays). Im folgenden
Beispiel ist $contact_type[customer] ein Array mit Kontakttypen des
aktuellen Kunden.
*}
{section name=customer loop=$custid}
<hr />
id: {$custid[customer]}<br />
name: {$name[customer]}<br />
address: {$address[customer]}<br />
{section name=contact loop=$contact_type[customer]}
{$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br />
{/section}
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
<hr />
id: 1000<br />
name: John Smith<br />
address: 253 N 45th<br />
home phone: 555-555-5555<br />
cell phone: 666-555-5555<br />
e-mail: john@myexample.com<br />
<hr />
id: 1001<br />
name: Jack Jones<br />
address: 417 Mulberry ln<br />
home phone: 123-456-4<br />
web: www.example.com<br />
<hr />
id: 1002<br />
name: Jane Munson<br />
address: 5605 apple st<br />
cell phone: 0457878<br />
]]>
</programlisting>
</example>
<example>
<title>sections und assoziative Arrays</title>
<programlisting role="php">
<![CDATA[
<?php
$data = array(
array('name' => 'John Smith', 'home' => '555-555-5555',
'cell' => '666-555-5555', 'email' => 'john@myexample.com'),
array('name' => 'Jack Jones', 'home' => '777-555-5555',
'cell' => '888-555-5555', 'email' => 'jack@myexample.com'),
array('name' => 'Jane Munson', 'home' => '000-555-5555',
'cell' => '123456', 'email' => 'jane@myexample.com')
);
$smarty->assign('contacts',$data);
?>
]]>
</programlisting>
<programlisting>
<![CDATA[
{*
Dies ist ein Beispiel wie man einen assoziativen Array in einer
'section' ausgeben kann.
*}
{section name=customer loop=$contacts}
<p>
name: {$contacts[customer].name}<br />
home: {$contacts[customer].home}<br />
cell: {$contacts[customer].cell}<br />
e-mail: {$contacts[customer].email}
</p>
{/section}
{* Anm. d. übersetzers: Oft ist die Anwendung von 'foreach' kürzer. *}
{foreach item=customer from=$contacts}
<p>
name: {$customer.name}<br />
home: {$customer.home}<br />
cell: {$customer.cell}<br />
e-mail: {$customer.email}
</p>
{/foreach}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
<p>
name: John Smith<br />
home: 555-555-5555<br />
cell: 555-555-5555<br />
e-mail: john@mydomain.com
</p>
<p>
name: Jack Jones<br />
home phone: 555-555-5555<br />
cell phone: 555-555-5555<br />
e-mail: jack@mydomain.com
<p>
name: Jane Munson<br />
home phone: 555-555-5555<br />
cell phone: 555-555-5555<br />
e-mail: jane@mydomain.com
</p>
]]>
</programlisting>
</example>
<example>
<title>sectionelse</title>
<programlisting>
<![CDATA[
{*
sectionelse wird aufgerufen, wenn keine $custid Werte vorhanden sind
*}
{section name=customer loop=$custid}
id: {$custid[customer]}<br>
{sectionelse}
keine Werte in $custid gefunden
{/section}
]]>
</programlisting>
</example>
<para>
Die Eigenschaften der 'section' werden in besonderen Variablen
abgelegt. Diese sind wie folgt aufgebaut: <link
linkend="language.variables.smarty.loops">{$smarty.section.sectionname.varname}</link>
</para>
<note>
<para>
Bermerkung: Seit Smarty 1.5.0 hat sich die Syntax der 'section'
Eigenschaften von {%sectionname.varname%} zu
{$smarty.section.sectionname.varname} geändert. Die alte Syntax
wird noch immer unterstützt, die Dokumentation erwähnt jedoch nur
noch die neue Schreibweise.
</para>
</note>
<sect2 id="section.property.index">
<title>index</title>
<para>
'index' wird verwendet, um den aktuellen Schleifen-Index
anzuzeigen. Er startet bei 0 (beziehungsweise der definierten
Startposition) und inkrementiert in 1-er Schritten (beziehungsweise
der definierten Schrittgrösse).
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Wenn 'step' und 'start' nicht übergeben werden, verhält sich der
Wert wie die 'section'-Eigenschaft 'iteration', ausser dass er bei
0 anstatt 1 beginnt.
</para>
</note>
<example>
<title>'section'-Eigenschaft 'index'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
0 id: 1000<br />
1 id: 1001<br />
2 id: 1002<br />
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.index.prev">
<title>index_prev</title>
<para>
'index_prev' wird verwendet um den vorhergehenden Schleifen-Index
auszugeben. Bei der ersten Iteration ist dieser Wert -1.
</para>
<example>
<title>section'-Eigenschaft 'index_prev'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{* zur Information, $custid[customer.index] und $custid[customer] bedeuten das selbe *}
{if $custid[customer.index_prev] ne $custid[customer.index]}
Die Kundennummer hat sich geändert.<br>
{/if}
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
0 id: 1000<br>
Die Kundennummer hat sich geändert.<br>
1 id: 1001<br>
Die Kundennummer hat sich geändert.<br>
2 id: 1002<br>
Die Kundennummer hat sich geändert.<br>
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.index.next">
<title>index_next</title>
<para>
'index_next' wird verwendet um den nächsten 'loop'-Index
auszugeben. Bei der letzten Iteration ist dieser Wert um 1 grösser
als der aktuelle 'loop'-Index (inklusive dem definierten 'step'
Wert).
</para>
<example>
<title>section'-Eigenschaft 'index_next'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{* zur Information, $custid[customer.index] und $custid[customer] bedeuten das selbe *}
{if $custid[customer.index_next] ne $custid[customer.index]}
Die Kundennummer wird sich ändern.<br>
{/if}
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
0 id: 1000<br>
Die Kundennummer wird sich ändern.<br>
1 id: 1001<br>
Die Kundennummer wird sich ändern.<br>
2 id: 1002<br>
Die Kundennummer wird sich ändern.<br>
]]Š
</programlisting>
</example>
</sect2>
<sect2 id="section.property.iteration">
<title>iteration</title>
<para>
'iteration' wird verwendet um die aktuelle Iteration auszugeben.
</para>
<para>
Bemerkung: Die Eigenschaften 'start', 'step' und 'max'
beeinflussen 'iteration' nicht, die Eigenschaft 'index' jedoch
schon. 'iteration' startet im gegensatz zu 'index' bei 1. 'rownum'
ist ein Alias für 'iteration' und arbeitet identisch.
</para>
<example>
<title>'section'-Eigenschaft 'iteration'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid start=5 step=2}
aktuelle loop iteration: {$smarty.section.customer.iteration}<br>
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{* zur Information, $custid[customer.index] und $custid[customer] bedeuten das gleiche *}
{if $custid[customer.index_next] ne $custid[customer.index]}
Die Kundennummer wird sich ändern.<br>
{/if}
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
aktuelle loop iteration: 1
5 id: 1000<br>
Die Kundennummer wird sich ändern.<br>
aktuelle loop iteration: 2
7 id: 1001<br>
Die Kundennummer wird sich ändern.<br>
aktuelle loop iteration: 3
9 id: 1002<br>
Die Kundennummer wird sich ändern.<br>
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.first">
<title>first</title>
<para>
'first' ist 'true', wenn die aktuelle Iteration die erste dieser
'section' ist.
</para>
<example>
<title>'section'-Eigenschaft 'first'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{if $smarty.section.customer.first}
<table>
{/if}
<tr><td>{$smarty.section.customer.index} id:
{$custid[customer]}</td></tr>
{if $smarty.section.customer.last}
</table>
{/if}
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.last">
<title>last</title>
<para>
'last' ist 'true' wenn die aktuelle Iteration die letzte dieser
'section' ist.
</para>
<example>
<title>'section'-Eigenschaft 'last'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{if $smarty.section.customer.first}
<table>
{/if}
<tr><td>{$smarty.section.customer.index} id:
{$custid[customer]}</td></tr>
{if $smarty.section.customer.last}
</table>
{/if}
{/section}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.rownum">
<title>rownum</title>
<para>
'rownum' wird verwendet um die aktuelle Iteration (startend bei 1)
auszugeben. 'rownum' ist ein Alias für 'iteration' und arbeitet
identisch.
</para>
<example>
<title>'section'-Eigenschaft 'rownum'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{$smarty.section.customer.rownum} id: {$custid[customer]}<br />
{/section}
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
1 id: 1000<br />
2 id: 1001<br />
3 id: 1002<br />
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.loop">
<title>loop</title>
<para>
'loop' wird verwendet, um die Nummer letzte Iteration der 'section'
auszugeben. Dieser Wert kann inner- und ausserhalb der 'section'
verwendet werden.
</para>
<example>
<title>'section'-Eigenschaft 'loop'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}
Es wurden {$smarty.section.customer.loop} Kunden angezeigt.
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
0 id: 1000<br />
1 id: 1001<br />
2 id: 1002<br />
Es wurden 3 Kunden angezeigt.
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.show">
<title>show</title>
<para>
<emphasis>show</emphasis> kann die Werte 'true' oder 'false' haben.
Falls der Wert 'true' ist, wird die 'section' angezeigt. Falls der
Wert 'false' ist, wird die 'section' - ausser dem 'sectionelse' -
nicht ausgegeben.
</para>
<example>
<title>'section'-Eigenschaft 'show'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid show=$show_customer_info}
{$smarty.section.customer.rownum} id: {$custid[customer]}<br />
{/section}
{if $smarty.section.customer.show}
die 'section' wurde angezeigt
{else}
die 'section' wurde nicht angezeigt
{/if}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
1 id: 1000<br />
2 id: 1001<br />
3 id: 1002<br />
die 'section' wurde angezeigt
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.total">
<title>total</title>
<para>
Wird verwendet um die Anzahl der durchlaufenen Iterationen einer
'section' auszugeben. Kann innerhalb oder ausserhalb der 'section'
verwendet werden.
</para>
<example>
<title>'section'-Eigenschaft 'total'</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid step=2}
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{/section}
Es wurden {$smarty.section.customer.total} Kunden angezeigt.
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<programlisting>
<![CDATA[
0 id: 1000<br>
2 id: 1001<br>
4 id: 1002<br>
Es wurden 3 Kunden angezeigt.
]]>
</programlisting>
</example>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,84 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: andreas Status: ready -->
<sect1 id="language.function.strip">
<title>strip</title>
<para>
Webdesigner haben oft das Problem, dass Leerzeichen und
Zeilenumbrüche die Ausgabe des erzeugten HTML im Browser
beeinflussen. Oft werden deshalb alle Tags aufeinanderfolgend im
Template notiert, was aber zu einer schlechten Lesbarkeit führt.
</para>
<para>
Aus dem Inhalt zwischen den {strip}{/strip}-Tags werden alle
Leerzeichen und Zeilenumbrüche entfernt. So können Sie Ihre
Templates lesbar halten, ohne sich Sorgen um die Leerzeichen zu
machen.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
{strip}{/strip} ändert nicht den Inhalt einer Template-Variablen.
Dafür gibt es den <link linkend="language.modifier.strip">strip
Modifikator</link>.
</para>
</note>
<example>
<title>strip tags</title>
<programlisting>
<![CDATA[
{* der folgende Inhalt wird in einer Zeile ausgegeben *}
{strip}
<table border=0>
<tr>
<td>
<a href="{$url}">
<font color="red">Das ist ein Test.</font>
</a>
</td>
</tr>
</table>
{/strip}
]]>
</programlisting>
<para>
Ausgebe des obigen Beispiels:
</para>
<screen>
<![CDATA[
<table border=0><tr><td><a href="http://my.domain.com"><font color="red">Das ist ein Test.</font></a></td></tr></table>
]]>
</screen>
</example>
<para>
Achtung: im obigen Beispiel beginnen und enden alle Zeilen mit
HTML-Tags. Falls Sie Abschnitte haben, die nur Text enthalten,
werden diese ebenfalls zusammengeschlossen. Das kann zu
unerwünschten Resultaten führen.
</para>
<para>
Siehe auch <link linkend="language.modifier.strip">strip-Modifikator
(Zeichenkette strippen)</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,72 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<chapter id="language.combining.modifiers">
<title>Kombinieren von Modifikatoren</title>
<para>
Sie können auf eine Variable so viele Modifikatoren anwenden
wie Sie möchten. Die Modifkatoren werden in der Reihenfolge
angewandt, in der sie notiert wurden - von links nach rechts.
Kombinierte Modifikatoren müssen mit einem
<literal>|</literal>-Zeichen (pipe) getrennt werden.
</para>
<example>
<title>Kombinieren von Modifikatoren</title>
<programlisting role="php" >
<![CDATA[
<?php
$smarty->assign('articleTitle',
'Einem Stadtrat in Salem in Pennsylvania (USA) droht eine
zweijährige Haftstrafe, da eine von ihm gehaltene Rede sechs
Minuten länger dauerte, als erlaubt. Die Redezeit ist auf maximal
fünf Minuten begrenzt.');
?>
]]>
</programlisting>
<para>
Wobei das Template dann folgendes entält:
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|upper|spacify}
{$articleTitle|lower|spacify|truncate}
{$articleTitle|lower|truncate:30|spacify}
{$articleTitle|lower|spacify|truncate:30:". . ."}
]]>
</programlisting>
<para>
AUSGABE:
</para>
<screen>
<![CDATA[
Einem Stadtrat in Salem in Pennsylvania (USA) droht eine (usw.)
EINEM STADTRAT IN SALEM IN PENNSYLVANIA (USA) DROHT EINE (usw.)
e i n e m s t a d t r a t i n s a l e m i n...
e i n e m s t a d t r a t i n s a l e m i n . . .
e i n e m s t a d t r. . .]]>
</screen>
</example>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,49 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<chapter id="language.custom.functions">
<title>Eigene Funktionen</title>
<para>
Smarty wird mit verschiedenen massgeschneiderten Funktionen geliefert, welche Sie in
Ihren Templates verwenden k&ouml;nnen.
</para>
&designers.language-custom-functions.language-function-assign;
&designers.language-custom-functions.language-function-counter;
&designers.language-custom-functions.language-function-cycle;
&designers.language-custom-functions.language-function-debug;
&designers.language-custom-functions.language-function-eval;
&designers.language-custom-functions.language-function-fetch;
&designers.language-custom-functions.language-function-html-checkboxes;
&designers.language-custom-functions.language-function-html-image;
&designers.language-custom-functions.language-function-html-options;
&designers.language-custom-functions.language-function-html-radios;
&designers.language-custom-functions.language-function-html-select-date;
&designers.language-custom-functions.language-function-html-select-time;
&designers.language-custom-functions.language-function-html-table;
&designers.language-custom-functions.language-function-mailto;
&designers.language-custom-functions.language-function-math;
&designers.language-custom-functions.language-function-popup;
&designers.language-custom-functions.language-function-popup-init;
&designers.language-custom-functions.language-function-textformat;
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,140 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<sect1 id="language.function.assign">
<title>{assign} (zuweisen)</title>
<para>
{assign} wird verwendet um einer Template-Variable <emphasis
role="bold">innerhalb eines Templates</emphasis> einen Wert
zuzuweisen.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>var</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Name der zuzuweisenden Variable.</entry>
</row>
<row>
<entry>value</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der zuzuweisende Wert.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{assign} (zuweisen)</title>
<programlisting>
<![CDATA[
{assign var="name" value="Bob"}
Der Wert von $name ist {$name}.
]]>
</programlisting>
<para>
Ausgabe des obiges Beispiels:
</para>
<screen>
<![CDATA[
Der Wert von $name ist Bob.</programlisting>
]]>
</screen>
</example>
<example>
<title>Zugriff auf mit {assign} zugwiesene Variablen von PHP aus.</title>
<para>
Um auf zugewiesene Variablen von php aus zuzugreifen nimmt man
<link linkend="api.get.template.vars">get_template_vars()</link>.
Die zugewiesenen variablen sind jedoch nur wärhend bzw. nach der
Ausgabe des Template verfügbar.
</para>
<programlisting>
<![CDATA[
{* index.tpl *}
{assign var="foo" value="Smarty"}
]]>
</programlisting>
<programlisting role="php">
<![CDATA[
<?php
// Keine Ausgabe, das das Template noch nicht ausgegeben wurde:
echo $smarty->get_template_vars('foo');
// das Template in eine ungenutzte Variable ausgeben
$nix = $smarty->fetch('index.tpl');
// Gibt 'smarty' aus, da die {assign} anweisung im Template ausgeführt
// wurde
echo $smarty->get_template_vars('foo');
$smarty->assign('foo','Even smarter');
// Ausgabe 'Even smarter'
echo $smarty->get_template_vars('foo');
?>
]]>
</programlisting>
</example>
<para>
Folgende Funktionen haben <emphasis>optionale</emphasis>
assign-Attribute:
</para>
<para>
<link linkend="language.function.capture">{capture}</link>,
<link linkend="language.function.include">{include}</link>,
<link linkend="language.function.include.php">{include_php}</link>,
<link linkend="language.function.insert">{insert}</link>,
<link linkend="language.function.counter">{counter}</link>,
<link linkend="language.function.cycle">{cycle}</link>,
<link linkend="language.function.eval">{eval}</link>,
<link linkend="language.function.fetch">{fetch}</link>,
<link linkend="language.function.math">{math}</link>,
<link linkend="language.function.textformat">{textformat}</link>
</para>
<para>
Siehe auch <link linkend="api.assign">assign()</link> und <link
linkend="api.get.template.vars">get_template_vars()</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,124 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: andreas Status: ready -->
<sect1 id="language.function.counter">
<title>{counter} (Zähler)</title>
<para>
{counter} wird verwendet um eine Zahlenreihe auszugeben. Sie können
den Initialwert bestimmen, den Zählinterval, die Richtung in der
gezählt werden soll und ob der Wert ausgegeben wird. Sie können
mehrere Zähler gleichzeitig laufen lassen, in dem Sie ihnen
einmalige Namen geben. Wenn Sie keinen Wert für 'name' übergeben,
wird 'default' verwendet.
</para>
<para>
Wenn Sie das spezielle 'assign'-Attribut verwenden, wird die Ausgabe
des Zählers dieser Template-Variable zugewiesen anstatt ausgegeben
zu werden.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>default</emphasis></entry>
<entry>Der Name des Zählers.</entry>
</row>
<row>
<entry>start</entry>
<entry>number</entry>
<entry>Nein</entry>
<entry><emphasis>1</emphasis></entry>
<entry>Der Initialwert.</entry>
</row>
<row>
<entry>skip</entry>
<entry>number</entry>
<entry>Nein</entry>
<entry><emphasis>1</emphasis></entry>
<entry>Der Interval.</entry>
</row>
<row>
<entry>direction</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>up</emphasis></entry>
<entry>Die Richtung (up/down).</entry>
</row>
<row>
<entry>print</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>true</emphasis></entry>
<entry>Definiert ob der Wert ausgegeben werden soll.</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Template-Variable welcher der Wert zugewiesen werden soll.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{counter} (Zähler)</title>
<programlisting>
<![CDATA[
{* zähler initialisieren *}
{counter start=0 skip=2}<br />
{counter}<br />
{counter}<br />
{counter}<br />
]]>
</programlisting>
<para>
AUSGABE:
</para>
<screen>
<![CDATA[
0<br />
2<br />
4<br />
6<br />
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,150 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<sect1 id="language.function.cycle">
<title>{cycle} (Zyklus)</title>
<para>
{cycle} wird verwendet um durch ein Set von Werten zu zirkulieren.
Dies vereinfacht die Handhabung von zwei oder mehr Farben in einer
Tabelle, oder um einen Array zu durchlaufen.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>default</emphasis></entry>
<entry>Der Name des Zyklus.</entry>
</row>
<row>
<entry>values</entry>
<entry>mixed</entry>
<entry>Ja</entry>
<entry><emphasis>N/A</emphasis></entry>
<entry>
Die Werte durch die zirkuliert werden soll, entweder als Komma
separierte Liste (siehe 'delimiter'-Attribut), oder als Array.
</entry>
</row>
<row>
<entry>print</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>true</emphasis></entry>
<entry>Definiert ob die Werte ausgegeben werden sollen oder
nicht.</entry>
</row>
<row>
<entry>advance</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>true</emphasis></entry>
<entry>Definiert ob der nächste Wert automatisch angesprungen
werden soll.</entry>
</row>
<row>
<entry>delimiter</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>,</emphasis></entry>
<entry>Das zu verwendende Trennzeichen.</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Name der Template-Variable welcher die Ausgabe
zugewiesen werden soll.</entry>
</row>
<row>
<entry>reset</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>false</emphasis></entry>
<entry>Der Zyklus wird auf den ersten Wert zurückgesetzt.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Sie können durch mehrere Sets gleichzeitig iterieren, indem Sie den
Sets einmalige Namen geben.
</para>
<para>
Um den aktuellen Wert nicht auszugeben, kann das 'print' Attribut
auf 'false' gesetzt werden. Dies könnte sinnvoll sein, wenn man
einen einzelnen Wert überspringen möchte.
</para>
<para>
Das 'advance'-Attribut wird verwendet um einen Wert zu wiederholen.
Wenn auf 'false' gesetzt, wird bei der nächsten Iteration der selbe
Wert erneut ausgegeben.
</para>
<para>
Wenn sie das spezielle 'assign'-Attribut übergeben, wird die Ausgabe
der {cycle}-Funktion in dieser Template-Variable abgelegt, anstatt
ausgegeben zu werden.
</para>
<example>
<title>{cycle} (Zyklus)</title>
<programlisting>
<![CDATA[
{section name=rows loop=$data}
<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}">
<td>{$data[rows]}</td>
</tr>
{/section}
]]>
</programlisting>
<screen>
<![CDATA[
<tr bgcolor="#eeeeee">
<td>1</td>
</tr>
<tr bgcolor="#d0d0d0">
<td>2</td>
</tr>
<tr bgcolor="#eeeeee">
<td>3</td>
</tr>
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,64 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<sect1 id="language.function.debug">
<title>{debug}</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>output</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>javascript</emphasis></entry>
<entry>Ausgabe-Typ, entweder HTML oder Javascript.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
{debug} zeigt die 'debugging'-Konsole auf der Seite an. <link
linkend="chapter.debugging.console">$debug</link> hat darauf keinen
Einfluss. Da die Ausgabe zur Laufzeit geschieht, können die
Template-Namen hier nicht ausgegeben werden. Sie erhalten jedoch
eine Liste aller mit <link linkend="api.assign">assigned</link>
zugewiesenen Variablen und deren Werten.
</para>
<para>
Siehe auch <link linkend="chapter.debugging.console">Debugging Konsole</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,128 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<sect1 id="language.function.eval">
<title>{eval} (auswerten)</title>
<para>
{eval} wird verwendet um eine Variable als Template
auszuwerten. Dies kann verwendet werden um Template-Tags/Variablen
in einer Variable oder einer Konfigurationsdatei abzulegen.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>var</entry>
<entry>mixed</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Variable oder Zeichenkette die ausgewertet werden soll.</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Template-Variable welcher die Ausgabe zugewiesen werden soll.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Wenn Sie das spezielle 'assign'-Attribut übergeben, wird die Ausgabe
von 'eval' in dieser Template-Variable gespeichert und nicht
ausgegeben.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Evaluierte Variablen werden gleich wie Template-Variablen verwendet
und folgen den selben Maskierungs- und Sicherheits-Features.
</para>
</note>
<note>
<title>Technische Bemerkung</title>
<para>
Evaluierte Variablen werden bei jedem Aufruf neu ausgewertet. Die
kompilierten Versionen werden dabei nicht abgelegt! Falls sie caching
eingeschaltet haben, wird die Ausgabe jedoch mit dem Rest des
Templates gecached.
</para>
</note>
<example>
<title>eval (auswerten)</title>
<programlisting>
<![CDATA[
setup.conf
----------
emphstart = <b>
emphend = </b>
title = Willkommen auf {$company}'s home page!
ErrorCity = Bitte geben Sie einen {#emphstart#}Stadtnamen{#emphend#} ein.
ErrorState = Bitte geben Sie einen {#emphstart#}Provinznamen{#emphend#} ein.
]]>
</programlisting>
<para>
index.tpl:
</para>
<programlisting>
<![CDATA[
{config_load file="setup.conf"}
{eval var=$foo}
{eval var=#title#}
{eval var=#ErrorCity#}
{eval var=#ErrorState# assign="state_error"}
{$state_error}
]]>
</programlisting>
<para>
Ausgabe des obigen Beispiels:
</para>
<screen>
<![CDATA[
Dies ist der Inhalt von foo:
Willkommen auf Pub & Grill's home page!
Bitte geben Sie einen <b>Stadtnamen</b> ein.
Bitte geben Sie einen <b>Provinznamen</b> ein.
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,117 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: andreas Status: ready -->
<sect1 id="language.function.fetch">
<title>{fetch}</title>
<para>
{fetch} wird verwendet um lokale oder via HTTP beziehungsweise FTP
verfügbare Inhalte auszugeben. Wenn der Dateiname mit 'http://'
anfängt, wird die angegebene Webseite geladen und angezeigt. Wenn
der Dateiname mit 'ftp://' anfängt wird die Datei vom FTP-Server
geladen und angezeigt. Für lokale Dateien muss der absolute Pfad,
oder ein Pfad relativ zum ausgeführten Skript übergeben werden.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Datei, FTP oder HTTP Seite die geliefert werden soll.</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Template-Variable welcher die Ausgabe zugewiesen werden soll.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Wenn Sie das spezielle 'assign'-Attribut übergeben, wird die Ausgabe
der {fetch}-Funktion dieser Template-Variable zugewiesen, anstatt
ausgegeben zu werden (seit Smarty 1.5.0).
</para>
<note>
<title>Technische Bemerkung</title>
<para>
HTTP-Redirects werden nicht unterstützt, stellen Sie sicher, dass
die aufgerufene URL falls nötig durch ein '/'-Zeichen (slash)
beendet wird.
</para>
</note>
<note>
<title>Technische Bemerkung</title>
<para>
Wenn Sicherheit eingeschaltet ist, und Dateien vom lokalen System
geladen werden sollen, ist dies nur für Dateien erlaubt welche sich
in einem definierten sicheren Verzeichnis befinden.
(<link linkend="variable.secure.dir">$secure_dir</link>)
</para>
</note>
<example>
<title>fetch</title>
<programlisting>
<![CDATA[
{* einbinden von javascript *}
{fetch file="/export/httpd/www.domain.com/docs/navbar.js"}
{* Wetter Informationen aus einer anderen Webseite bei uns anzeigen *}
{fetch file="http://www.myweather.com/68502/"}
{* News Datei via FTP auslesen *}
{fetch file="ftp://user:password@ftp.domain.com/path/to/currentheadlines.txt"}
{* die Ausgabe einer Template variable zuweisen *}
{fetch file="http://www.myweather.com/68502/" assign="weather"}
{if $weather ne ""}
<b>{$weather}</b>
{/if}
]]>
</programlisting>
</example>
<para>
Siehe auch <link
linkend="language.function.capture">{capture}</link>, <link
linkend="language.function.eval">{eval}</link> und <link
linkend="api.fetch">fetch()</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,170 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.11 Maintainer: andreas Status: ready -->
<sect1 id="language.function.html.checkboxes">
<title>{html_checkboxes} (Ausgabe von HTML-Checkbox Tag)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>checkbox</emphasis></entry>
<entry>Name der checkbox Liste</entry>
</row>
<row>
<entry>values</entry>
<entry>array</entry>
<entry>ja, ausser wenn das option Attribut verwendet wird</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ein Array mit Werten für die checkboxes</entry>
</row>
<row>
<entry>output</entry>
<entry>array</entry>
<entry>ja, ausser wenn das option Attribut verwendet wird</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ein Array mit Werten für checkbox Knöpfe</entry>
</row>
<row>
<entry>selected</entry>
<entry>string/array</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>das/die ausgewählten checkbox Elemente</entry>
</row>
<row>
<entry>options</entry>
<entry>assoziatives array</entry>
<entry>Ja, ausser values/output wird verwendet</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ein assoziatives Array mit Werten und Ausgaben</entry>
</row>
<row>
<entry>separator</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Zeichenkette die zwischen den checkbox Elementen eingefügt werden soll</entry>
</row>
<row>
<entry>labels</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>true</emphasis></entry>
<entry>fügt der Ausgabe &lt;label&gt;-Tags hinzu</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
html_checkboxes ist eine <link
linkend="language.custom.functions">Funktion</link> die aus den
übergebenen Daten html checkbox Elemente erstellt und kümmert sich
darum welche Elemente ausgewählt sind. Erforderliche Attribute sind
Wert/Ausgabe oder Options. Die Ausgabe ist XHTML kompatibel
</para>
<para>
Alle Parameter die nicht in der Liste erwähnt werden, werden ausgegeben.
</para>
<example>
<title>{html_checkboxes}</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array('Joe Schmoe',
'Jack Smith',
'Jane Johnson',
'Charlie Brown'));
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
Wobei index.tpl wie folgt aussieht:
</para>
<programlisting>
<![CDATA[
{html_checkboxes name="id" values=$cust_ids selected=$customer_id output=$cust_names separator="<br />"}
]]>
</programlisting>
<para>
Oder mit folgendem PHP-Code:
</para>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_checkboxes', array(
1000 => 'Joe Schmoe',
1001 => 'Jack Smith',
1002 => 'Jane Johnson',
1003 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Wobei index.tpl wie folgt aussieht:
</para>
<programlisting>
<![CDATA[
{html_checkboxes name="id" options=$cust_checkboxes selected=$customer_id separator="<br />"}
]]>
</programlisting>
<para>
Das Ergebnis beider Listings:
</para>
<screen>
<![CDATA[
<label><input type="checkbox" name="id[]" value="1000" />Joe Schmoe</label><br />
<label><input type="checkbox" name="id[]" value="1001" checked="checked" />Jack Smith</label><br />
<label><input type="checkbox" name="id[]" value="1002" />Jane Johnson</label><br />
<label><input type="checkbox" name="id[]" value="1003" />Charlie Brown</label><br />
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,157 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: andreas Status: ready -->
<sect1 id="language.function.html.image">
<title>html_image (Ausgabe von HTML-IMG Tag)</title>
<para>
{html_image} ist eine <link
linkend="language.custom.functions">eigene Funktion</link> die ein
HTML Tag für ein Bild erzeugt. Die Höhe und Breite der Ausgabe wird
automatisch aus der Bilddatei berechnet wenn die Werte nicht
übergeben werden.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Name/Pfad zum Bild</entry>
</row>
<row>
<entry>height</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>Normale Höhe des Bildes</emphasis></entry>
<entry>Höhe des Bildes</entry>
</row>
<row>
<entry>width</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>Normale Breite des Bildes</emphasis></entry>
<entry>Breite des Bildes</entry>
</row>
<row>
<entry>basedir</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>DOCUMENT_ROOT</emphasis></entry>
<entry>Basisverzeichnis für relative Pfadangaben</entry>
</row>
<row>
<entry>alt</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>""</emphasis></entry>
<entry>Alternative Beschreibung des Bildes</entry>
</row>
<row>
<entry>href</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Link für das Bild</entry>
</row>
<row>
<entry>path_prefix</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Präfix für den Pfad zum Bild</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
basedir ist der Basispfad der für die Verlinkung verwendet werden
soll. Wenn kein Wert übergeben wird, wird die <link
linkend="language.variables.smarty">Umgebungsvariable</link>
DOCUMENT_ROOT verwendet. Wenn <link
linkend="variable.security">Sicherheit</link> eingeschaltet ist,
muss das Bild in einem sicheren Verzeichnis liegen.
</para>
<para>
<parameter>href</parameter> ist das href Attribut für das
Image-Tag. Wenn dieser Wert übergeben wird, wird um das Bild ein
&lt;a href="LINKVALUE"&gt;&lt;a&gt; Tag erzeugt.
</para>
<para>
<parameter>path_prefix</parameter> ist ein optionaler Präfix der dem
Bildpfad vorangestellt wird. Die ist nützlich wenn zum Beispiel für
den Bildpfad ein anderer Servername verwendet werden soll.
</para>
<para>
Alle weiteren Parameter werden als Name/Wert Paare (Attribute) im
&lt;img&gt;-Tag ausgegeben.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
{html_image} greift auf das Dateisystem zu um Höhe und Breite zu
errechnen. Wenn Sie <link linkend="caching">caching</link> nicht
verwenden sollten Sie normalerweise auf diese Funktion aus
performance Gründen verzichten.
</para>
</note>
<example>
<title>html_image</title>
<programlisting>
<![CDATA[
Wobei index.tpl wie folgt aussieht:
-----------------------------------
{html_image file="pumpkin.jpg"}
{html_image file="/path/from/docroot/pumpkin.jpg"}
{html_image file="../path/relative/to/currdir/pumpkin.jpg"}
]]>
</programlisting>
<para>
Mögliche Ausgabe:
</para>
<screen>
<![CDATA[
<img src="pumpkin.jpg" alt="" width="44" height="68" />
<img src="/path/from/docroot/pumpkin.jpg" alt="" width="44" height="68" />
<img src="../path/relative/to/currdir/pumpkin.jpg" alt="" width="44" height="68" />
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,210 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: andreas Status: ready -->
<sect1 id="language.function.html.options">
<title>html_options (Ausgabe von HTML-Options)</title>
<para>
{html_options} wird verwendet um HTML-Options Listen mit den
übergebenen Daten zu erzeugen. Die <link
linkend="language.custom.functions">Funktion</link> kümmert sich
ebenfalls um das setzen des ausgewählten Standardwertes. Die
Attribute 'values' und 'output' sind erforderlich, ausser man
verwendet das Attribut 'options'.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>values</entry>
<entry>array</entry>
<entry>Ja, ausser 'options'-Attribut wird verwendet.</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Array mit Werten für die dropdown-Liste.</entry>
</row>
<row>
<entry>output</entry>
<entry>array</entry>
<entry>Ja, ausser 'options'-Attribut wird verwendet.</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Arrays mit Namen für die dropdown-Liste.</entry>
</row>
<row>
<entry>selected</entry>
<entry>string/array</entry>
<entry>Nein</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Das ausgewählte Array Element.</entry>
</row>
<row>
<entry>options</entry>
<entry>associative array</entry>
<entry>Ja, ausser wenn das 'values'- und das 'output'-Attribut verwendet werden.</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Assoziatives Array mit Werten die ausgegeben werden sollen.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Wenn ein Wert als Array erkannt wird, wird er als HTML-OPTGROUP
ausgegeben und die Werte werden in Gruppen dargestellt. Rekursion
wird unterstützt. Die Ausgabe ist XHTML kompatibel.
</para>
<para>
Wenn das (optionale) Attribute <emphasis>name</emphasis> angegeben
wurde, wird um die &lt;option&gt;-Liste von &lt;select
name="groupname"&gt;&lt;/select&gt;-Tags umschlossen
</para>
<para>
Alle Parameter die deren Namen nicht in der obigen Liste genannt
wurde, werden dem &lt;select&gt;-Tag als Name/Wert-Paare
hinzugefügt. Die Parameter werden ignoriert, wenn kein
<emphasis>name</emphasis>-Attribute angegeben wurde.
</para>
<example>
<title>html_options</title>
<para>
<emphasis role="bold">Beispiel 1:</emphasis>
</para>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array(
'Joe Schmoe',
'Jack Smith',
'Jane Johnson',
'Charlie Brown'));
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
Wobei das Template wie folgt aussieht:
</para>
<programlisting>
<![CDATA[
<select name="customer_id">
{html_options values=$cust_ids output=$cust_names selected=$customer_id}
</select>
]]>
</programlisting>
<para>
<emphasis role="bold">Beispiel 2:</emphasis>
</para>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_options', array(
1000 => 'Joe Schmoe',
1001 => 'Jack Smith',
1002 => 'Jane Johnson',
1003 => 'Charlie Brown')
);
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
Wobei das Template wie folgt aussieht:
</para>
<programlisting>
<![CDATA[
{html_options name=customer_id options=$cust_options selected=$customer_id}
]]>
</programlisting>
<para>
Beide Beispiele ergeben folgende Ausgabe:
</para>
<screen>
<![CDATA[
<select name="customer_id" size="4">
<option label="Joe Schmoe" value="1000">Joe Schmoe</option>
<option label="Jack Smith" value="1001" selected="selected">Jack Smith</option>
<option label="Jane Johnson" value="1002">Jane Johnson</option>
<option label="Charlie Brown" value="1003">Charlie Brown</option>
</select>
]]>
</screen>
</example>
<para>
Siehe auch <link
linkend="language.function.html.checkboxes">{html_checkboxes}</link>
und <link
linkend="language.function.html.radios">{html_radios}</link>
</para>
<example>
<title>{html_options} - Beispiel mit Datenbank (z.B. PEAR oder ADODB):</title>
<programlisting role="php">
<![CDATA[
<?php
$sql = 'select type_id, types from types order by type';
$smarty->assign('types',$db->getAssoc($sql));
$sql = 'select contact_id, name, email, type_id
from contacts where contact_id='.$contact_id;
$smarty->assign('contact',$db->getRow($sql));
?>
]]>
</programlisting>
<para>
Wobei das Template wie folgt aussieht:
</para>
<programlisting>
<![CDATA[
<select name="type_id">
<option value='null'>-- none --</option>
{html_options name="type" options=$types selected=$contact.type_id}
</select>
]]>
</programlisting>
</example>
<para>
Siehe auch <link
linkend="language.function.html.checkboxes">{html_checkboxes}</link>
und <link
linkend="language.function.html.radios">{html_radios}</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,191 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: andreas Status: ready -->
<sect1 id="language.function.html.radios">
<title>html_radios (Ausgabe von HTML-RADIO Tags)</title>
<para>
html_radio ist eine Funktion die aus den übergebenen Daten html
radio Elemente erstellt und kümmert sich darum welche Elemente
ausgewählt sind. Erforderliche Attribute sind Wert/Ausgabe
oder Options. Die Ausgabe ist XHTML kompatibel
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>radio</emphasis></entry>
<entry>Name der Radio Liste</entry>
</row>
<row>
<entry>values</entry>
<entry>array</entry>
<entry>Ja, ausser 'options'-Attribut wird verwendet.</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Array mit Werten für die dropdown-Liste.</entry>
</row>
<row>
<entry>output</entry>
<entry>array</entry>
<entry>Ja, ausser 'options'-Attribut wird verwendet.</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Arrays mit Namen für die dropdown-Liste.</entry>
</row>
<row>
<entry>selected</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Das ausgewählte Array Element.</entry>
</row>
<row>
<entry>options</entry>
<entry>associative array</entry>
<entry>Ja, ausser wenn das 'values'- und das 'output'-Attribut verwendet werden.</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Assoziatives Array mit Werten die ausgegeben werden sollen.</entry>
</row>
<row>
<entry>separator</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Die Zeichenkette die zwischen 2 Radioelemente eingefügt werden soll.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Alle weiteren Parameter werden als Name/Wert Paare (Attribute) in jedem der &lt;input&gt;-Tags ausgegeben.
</para>
<example>
<title>html_radios</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array(
'Joe Schmoe',
'Jack Smith',
'Jane Johnson',
'Carlie Brown')
);
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
Mit folgendem index.tpl:
</para>
<programlisting>
<![CDATA[
{html_radios values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"}
]]>
</programlisting>
</example>
<example>
<title>{html_radios} : Example 2</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_radios', array(
1000 => 'Joe Schmoe',
1001 => 'Jack Smith',
1002 => 'Jane Johnson',
1003 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
Mit folgendem index.tpl:
</para>
<programlisting>
<![CDATA[
{html_radios name="id" options=$cust_radios selected=$customer_id separator="<br />"}
]]>
</programlisting>
<para>
Ausgabe beider Beispiele:
</para>
<screen>
<![CDATA[
<label for="id_1000">
<input type="radio" name="id" value="1000" id="id_1000" />Joe Schmoe</label><br />
<label for="id_1001"><input type="radio" name="id" value="1001" id="id_1001" checked="checked" />Jack Smith</label><br />
<label for="id_1002"><input type="radio" name="id" value="1002" id="id_1002" />Jane Johnson</label><br />
<label for="id_1003"><input type="radio" name="id" value="1003" id="id_1003" />Charlie Brown</label><br />
]]>
</screen>
</example>
<example>
<title>{html_radios}-Datenbankbeispiel (z.B. mit PEAR oder ADODB):</title>
<programlisting role="php">
<![CDATA[
<?php
$sql = 'select type_id, types from types order by type';
$smarty->assign('types',$db->getAssoc($sql));
$sql = 'select contact_id, name, email, type_id
from contacts where contact_id='.$contact_id;
$smarty->assign('contact',$db->getRow($sql));
?>
]]>
</programlisting>
<para>
Mit folgendem index.tpl:
</para>
<programlisting>
<![CDATA[
{html_radios name="type" options=$types selected=$contact.type_id separator="<br />"}
]]>
</programlisting>
</example>
<para>
Siehe auch <link
linkend="language.function.html.checkboxes">{html_checkboxes}</link>
und <link
linkend="language.function.html.options">{html_options}</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,322 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<sect1 id="language.function.html.select.date">
<title>html_select_date (Ausgabe von Daten als HTML-'options')</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>prefix</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>Date_</entry>
<entry>Prefix f&uuml;r die Namen.</entry>
</row>
<row>
<entry>time</entry>
<entry>timestamp/YYYY-MM-DD</entry>
<entry>Nein</entry>
<entry>Aktuelle Zeit als Unix-Timestamp, oder in YYYY-MM-DD format.</entry>
<entry>Das zu verwendende Datum.</entry>
</row>
<row>
<entry>start_year</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>aktuelles Jahr</entry>
<entry>Das erste Jahr in der dropdown-Liste, entweder als Jahreszahl oder relativ zum aktuellen Jahr (+/- N).</entry>
</row>
<row>
<entry>end_year</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>Gegenteil von start_year</entry>
<entry>Das letzte Jahr in der dropdown-Liste, entweder als Jahreszahl oder relativ zum aktuellen Jahr (+/- N).</entry>
</row>
<row>
<entry>display_days</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob Tage ausgegeben sollen oder nicht.</entry>
</row>
<row>
<entry>display_months</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob Monate ausgegeben werden sollen oder nicht.</entry>
</row>
<row>
<entry>display_years</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob Jahre ausgegeben werden sollen oder nicht.</entry>
</row>
<row>
<entry>month_format</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>%B</entry>
<entry>Format in welchem der Monat ausgegeben werden soll. (strftime)</entry>
</row>
<row>
<entry>day_format</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>%02d</entry>
<entry>Definiert das Format in welchem der Tag ausgegeben werden soll. (sprintf)</entry>
</row>
<row>
<entry>year_as_text</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>false</entry>
<entry>Definiert ob das Jahr als Text ausgegeben werden soll oder nicht.</entry>
</row>
<row>
<entry>reverse_years</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>false</entry>
<entry>Definiert ob die Daten in verkehrter Reihenfolge ausgegeben werden sollen.</entry>
</row>
<row>
<entry>field_array</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>
Wenn ein Namen &uuml;bergeben wird, werden die Daten in der Form name[Day], name[Year], name[Month] an PHP zur&uuml;ckgegeben.
</entry>
</row>
<row>
<entry>day_size</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt dem 'select'-Tag das Attribut 'size' hinzu.</entry>
</row>
<row>
<entry>month_size</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt dem 'select'-Tag das Attribut 'size' hinzu.</entry>
</row>
<row>
<entry>year_size</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt dem 'select'-Tag das Attribut 'size' hinzu.</entry>
</row>
<row>
<entry>all_extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt allen 'select'-Tags zus&auml;tzliche Attribute hinzu.</entry>
</row>
<row>
<entry>day_extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt 'select'-Tags zus&auml;tzliche Attribute hinzu.</entry>
</row>
<row>
<entry>month_extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt 'select'-Tags zus&auml;tzliche Attribute hinzu.</entry>
</row>
<row>
<entry>year_extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt 'select'-Tags zus&auml;tzliche Attribute hinzu.</entry>
</row>
<row>
<entry>field_order</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>MDY</entry>
<entry>Die Reihenfolge in der die Felder ausgegeben werden.</entry>
</row>
<row>
<entry>field_separator</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>\n</entry>
<entry>Zeichenkette die zwischen den Feldern ausgegeben werden soll.</entry>
</row>
<row>
<entry>month_value_format</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>%m</entry>
<entry>Format zur Ausgabe der Monats-Werte, Standardwert ist %m. (strftime)</entry>
</row>
<row>
<entry>year_empty</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>Definiert, einen Namen f&uuml;r das erste Element der Jahres Select-Box und dessen Wert "". Dies is hilfreich, wenn Sie eine Select-Box machen wollen, die die Zeichenkette "Bitte w&auml;hlen Sie ein Jahr" als erstes Element enth&auml;lt. Beachten Sie, dass Sie Werte wie "-MM-DD" als 'time' Attribut definieren k&ouml;nnen, um ein unselektiertes Jahr anzuzeigen.</entry>
</row>
<row>
<entry>month_empty</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>Definiert, einen Namen f&uuml;r das erste Element der Monats Select-Box und dessen Wert "". Dies is hilfreich, wenn Sie eine Select-Box machen wollen, die die Zeichenkette "Bitte w&auml;hlen Sie einen Monat" als erstes Element enth&auml;lt. Beachten Sie, dass Sie Werte wie "YYYY--DD" als 'time' Attribut definieren k&ouml;nnen, um einen unselektierten Monat anzuzeigen.</entry>
</row>
<row>
<entry>day_empty</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>Definiert, einen Namen f&uuml;r das erste Element der Tages Select-Box und dessen Wert "". Dies is hilfreich, wenn Sie eine Select-Box machen wollen, die die Zeichenkette "Bitte w&auml;hlen Sie einen Tag" als erstes Element enth&auml;lt. Beachten Sie, dass Sie Werte wie "YYYY-MM-" als 'time' Attribut definieren k&ouml;nnen, um einen unselektierten Tag anzuzeigen.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
'html_select_date' wird verwendet um Datums-Dropdown-Listen zu erzeugen,
und kann einen oder alle der folgenden Werte darstellen: Jahr, Monat und Tag
</para>
<example>
<title>html_select_date</title>
<programlisting>
{html_select_date}
AUSGABE:
&lt;select name="Date_Month"&gt;
&lt;option value="1"&gt;January&lt;/option&gt;
&lt;option value="2"&gt;February&lt;/option&gt;
&lt;option value="3"&gt;March&lt;/option&gt;
&lt;option value="4"&gt;April&lt;/option&gt;
&lt;option value="5"&gt;May&lt;/option&gt;
&lt;option value="6"&gt;June&lt;/option&gt;
&lt;option value="7"&gt;July&lt;/option&gt;
&lt;option value="8"&gt;August&lt;/option&gt;
&lt;option value="9"&gt;September&lt;/option&gt;
&lt;option value="10"&gt;October&lt;/option&gt;
&lt;option value="11"&gt;November&lt;/option&gt;
&lt;option value="12" selected&gt;December&lt;/option&gt;
&lt;/select&gt;
&lt;select name="Date_Day"&gt;
&lt;option value="1"&gt;01&lt;/option&gt;
&lt;option value="2"&gt;02&lt;/option&gt;
&lt;option value="3"&gt;03&lt;/option&gt;
&lt;option value="4"&gt;04&lt;/option&gt;
&lt;option value="5"&gt;05&lt;/option&gt;
&lt;option value="6"&gt;06&lt;/option&gt;
&lt;option value="7"&gt;07&lt;/option&gt;
&lt;option value="8"&gt;08&lt;/option&gt;
&lt;option value="9"&gt;09&lt;/option&gt;
&lt;option value="10"&gt;10&lt;/option&gt;
&lt;option value="11"&gt;11&lt;/option&gt;
&lt;option value="12"&gt;12&lt;/option&gt;
&lt;option value="13" selected&gt;13&lt;/option&gt;
&lt;option value="14"&gt;14&lt;/option&gt;
&lt;option value="15"&gt;15&lt;/option&gt;
&lt;option value="16"&gt;16&lt;/option&gt;
&lt;option value="17"&gt;17&lt;/option&gt;
&lt;option value="18"&gt;18&lt;/option&gt;
&lt;option value="19"&gt;19&lt;/option&gt;
&lt;option value="20"&gt;20&lt;/option&gt;
&lt;option value="21"&gt;21&lt;/option&gt;
&lt;option value="22"&gt;22&lt;/option&gt;
&lt;option value="23"&gt;23&lt;/option&gt;
&lt;option value="24"&gt;24&lt;/option&gt;
&lt;option value="25"&gt;25&lt;/option&gt;
&lt;option value="26"&gt;26&lt;/option&gt;
&lt;option value="27"&gt;27&lt;/option&gt;
&lt;option value="28"&gt;28&lt;/option&gt;
&lt;option value="29"&gt;29&lt;/option&gt;
&lt;option value="30"&gt;30&lt;/option&gt;
&lt;option value="31"&gt;31&lt;/option&gt;
&lt;/select&gt;
&lt;select name="Date_Year"&gt;
&lt;option value="2001" selected&gt;2001&lt;/option&gt;
&lt;/select&gt;</programlisting>
</example>
<example>
<title>html_select_date</title>
<programlisting>
{* Start- und End-Jahr k&ouml;nnen relativ zum aktuellen Jahr definiert werden. *}
{html_select_date prefix="StartDate" time=$time start_year="-5" end_year="+1" display_days=false}
AUSGABE: (aktuelles Jahr ist 2000)
&lt;select name="StartDateMonth"&gt;
&lt;option value="1"&gt;January&lt;/option&gt;
&lt;option value="2"&gt;February&lt;/option&gt;
&lt;option value="3"&gt;March&lt;/option&gt;
&lt;option value="4"&gt;April&lt;/option&gt;
&lt;option value="5"&gt;May&lt;/option&gt;
&lt;option value="6"&gt;June&lt;/option&gt;
&lt;option value="7"&gt;July&lt;/option&gt;
&lt;option value="8"&gt;August&lt;/option&gt;
&lt;option value="9"&gt;September&lt;/option&gt;
&lt;option value="10"&gt;October&lt;/option&gt;
&lt;option value="11"&gt;November&lt;/option&gt;
&lt;option value="12" selected&gt;December&lt;/option&gt;
&lt;/select&gt;
&lt;select name="StartDateYear"&gt;
&lt;option value="1999"&gt;1995&lt;/option&gt;
&lt;option value="1999"&gt;1996&lt;/option&gt;
&lt;option value="1999"&gt;1997&lt;/option&gt;
&lt;option value="1999"&gt;1998&lt;/option&gt;
&lt;option value="1999"&gt;1999&lt;/option&gt;
&lt;option value="2000" selected&gt;2000&lt;/option&gt;
&lt;option value="2001"&gt;2001&lt;/option&gt;
&lt;/select&gt;</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,324 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<sect1 id="language.function.html.select.time">
<title>html_select_time (Ausgabe von Zeiten als HTML-'options')</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>prefix</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>Time_</entry>
<entry>Prefix des Namens.</entry>
</row>
<row>
<entry>time</entry>
<entry>timestamp</entry>
<entry>Nein</entry>
<entry>Aktuelle Uhrzeit.</entry>
<entry>Definiert die zu verwendende Uhrzeit.</entry>
</row>
<row>
<entry>display_hours</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob Stunden ausgegeben werden sollen.</entry>
</row>
<row>
<entry>display_minutes</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob Minuten ausgegeben werden sollen.</entry>
</row>
<row>
<entry>display_seconds</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob Sekunden ausgegeben werden sollen.</entry>
</row>
<row>
<entry>display_meridian</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob der Meridian (am/pm) ausgegeben werden soll.</entry>
</row>
<row>
<entry>use_24_hours</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob die Stunden in 24-Stunden Format angezeigt werden sollen oder nicht.</entry>
</row>
<row>
<entry>minute_interval</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry>1</entry>
<entry>Definiert den Interval in der Minuten-Dropdown-Liste.</entry>
</row>
<row>
<entry>second_interval</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry>1</entry>
<entry>Definiert den Interval in der Sekunden-Dropdown-Liste.</entry>
</row>
<row>
<entry>field_array</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>n/a</entry>
<entry>Gibt die Daten in einen Array dieses Namens aus.</entry>
</row>
<row>
<entry>all_extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt allen 'select'-Tags zus&auml;tzliche Attribute hinzu.</entry>
</row>
<row>
<entry>hour_extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt dem Stunden-'select'-Tag zus&auml;tzliche Attribute hinzu.</entry>
</row>
<row>
<entry>minute_extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt dem Minuten-'select'-Tag zus&auml;tzliche Attribute hinzu.</entry>
</row>
<row>
<entry>second_extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>null</entry>
<entry>F&uuml;gt dem Sekunden-'select'-Tag zus&auml;tzliche Attribute hinzu.</entry>
</row>
<row>
<entry>meridian_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>F&uuml;gt dem Meridian-'select'-Tag zus&auml;tzliche Attribute hinzu.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
'html_select_time' wird verwendet um Zeit-Dropdown-Listen zu erzeugen.
Die Funktion kann alle oder eines der folgenden Felder ausgeben: Stunde, Minute, Sekunde und Meridian.
</para>
<example>
<title>html_select_time</title>
<programlisting>
<![CDATA[
{html_select_time use_24_hours=true}
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
<select name="Time_Hour">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09" selected>09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
</select>
<select name="Time_Minute">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20" selected>20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Second">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23" selected>23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Meridian">
<option value="am" selected>AM</option>
<option value="pm">PM</option>
</select>
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,146 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.function.html.table">
<title>html_table (Ausgabe von HTML-TABLE Tag)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standartwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>loop</entry>
<entry>array</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Array mit den Daten f&uuml;r den Loop</entry>
</row>
<row>
<entry>cols</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>3</emphasis></entry>
<entry>Anzahl Spalten in einer Tabelle</entry>
</row>
<row>
<entry>table_attr</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>border="1"</emphasis></entry>
<entry>Attribute f&uuml;r das Table-Tag</entry>
</row>
<row>
<entry>tr_attr</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Attribute f&uuml;r das tr-Tag (Arrays werden durchlaufen)</entry>
</row>
<row>
<entry>td_attr</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>Attribute f&uuml;r das tr-Tag (Arrays werden durchlaufen)</entry>
</row>
<row>
<entry>trailpad</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>&amp;nbsp;</emphasis></entry>
<entry>Wert f&uuml;r leere Zellen</entry>
</row>
<row>
<entry>hdir</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>right</emphasis></entry>
<entry>Richtung in der die Zeilen gerendered werden. M&ouml;gliche Werte: <emphasis>left</emphasis>/<emphasis>right</emphasis></entry>
</row>
<row>
<entry>vdir</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>down</emphasis></entry>
<entry>Richtung in der die Spalten gerendered werden. M&ouml;gliche Werte: <emphasis>up</emphasis>/<emphasis>down</emphasis></entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
<emphasis>html_table</emphasis> ist eine eigene Funktion die einen Array als
Tabelle ausgibt. Das <emphasis>cols</emphasis> Attribut definiert die Menge
von Spalten die ausgegeben werden sollen. <emphasis>table_attr</emphasis>, <emphasis>tr_attr</emphasis>
und <emphasis>td_attr</emphasis> definieren die Attribute f&uuml;r die HTML Tags. Wenn <emphasis>tr_attr</emphasis>
oder <emphasis>td_attr</emphasis> Arrays sind, werden diese durchlaufen. <emphasis>trailpad</emphasis>
wird in leere Zellen eingef&uuml;gt.
</para>
<example>
<title>html_table</title>
<programlisting>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty-&gt;assign('data',array(1,2,3,4,5,6,7,8,9));
$smarty-&gt;assign('tr',array('bgcolor="#eeeeee"','bgcolor="#dddddd"'));
$smarty-&gt;display('index.tpl');
index.tpl:
{html_table loop=$data}
{html_table loop=$data cols=4 table_attr='border="0"'}
{html_table loop=$data cols=4 tr_attr=$tr}
AUSGABE:
&lt;table border="1"&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table border="0"&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table border="1"&gt;
&lt;tr bgcolor="#eeeeee"&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor="#dddddd"&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor="#eeeeee"&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,142 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.function.mailto">
<title>mailto</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Ben&ouml;tigt</entry>
<entry>Standard</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>Adresse</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die EMail Adresse</entry>
</row>
<row>
<entry>Text</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der Text der angezeigt werden soll. Standardwert ist die EMail Adresse</entry>
</row>
<row>
<entry>encode</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>none</emphasis></entry>
<entry>Wie die EMail Adresse verschl&uuml;sselt werden soll. Erlaubt sind 'none', 'hex' und 'javascript'.</entry>
</row>
<row>
<entry>CC</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Komma separierte Liste der EMail Adressen, die eine Kopie der Nachricht erhalten sollen.</entry>
</row>
<row>
<entry>BCC</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Komma separierte Liste der EMail Adressen, die eine blinde Kopie der Nachricht erhalten sollen.</entry>
</row>
<row>
<entry>Titel</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Titel der Nachricht.</entry>
</row>
<row>
<entry>Newsgroups</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Komma separierte Liste der Newsgroups, die eine Kopie der Nachricht erhalten sollen.</entry>
</row>
<row>
<entry>FollowupTo</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Komma separierte Liste der Followup Adressen.</entry>
</row>
<row>
<entry>Extra</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Zus&auml;tzliche Attribute, die sie dem Link geben wollen.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
mailto vereinfach den Einsatz von mailto-Links und verschl&uuml;sselt die Links. Verschl&uuml;sselte Links k&ouml;nnen von WebSpiders schlechter ausgelesen werden.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Javascript ist wahrscheinlich die beste Methode, die Daten für WebSpider unzug&auml;nglich zu machen.
</para>
</note>
<example>
<title>mailto</title>
<programlisting>
{mailto address="me@domain.com"}
{mailto address="me@domain.com" text="Der angezeigte Linktext"}
{mailto address="me@domain.com" encode="javascript"}
{mailto address="me@domain.com" encode="hex"}
{mailto address="me@domain.com" subject="Hallo!"}
{mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
{mailto address="me@domain.com" extra='class="email"'}
OUTPUT:
&lt;a href="mailto:me@domain.com" &gt;me@domain.com&lt;/a&gt;
&lt;a href="mailto:me@domain.com" &gt;Der angezeigte Linktext&lt;/a&gt;
&lt;script type="text/javascript" language="javascript"&gt;eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6
9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%
61%69%6e%2e%63%6f%6d%22%20%3e%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%3c%2f%61%3e
%27%29%3b'))&lt;/script&gt;
&lt;a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d" &gt;&#x6d;&#x65;&#x40;&#x64;&#x6f;&#x6d;&#x61;&#x69;&#x6e;&#x2e;&#x63;&#x6f;&#x6d;&lt;/a&gt;
&lt;a href="mailto:me@domain.com?subject=Hallo%21" &gt;me@domain.com&lt;/a&gt;
&lt;a href="mailto:me@domain.com?cc=you@domain.com%2Cthey@domain.com" &gt;me@domain.com&lt;/a&gt;
&lt;a href="mailto:me@domain.com" class="email"&gt;me@domain.com&lt;/a&gt;</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,152 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.function.math">
<title>math (Mathematik)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>equation</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Der auszuf&uuml;hrende Vergleich.</entry>
</row>
<row>
<entry>format</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Format der Ausgabe. (sprintf)</entry>
</row>
<row>
<entry>var</entry>
<entry>numeric</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Wert der Vergleichsvariable.</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Template-Variable welcher die Ausgabe zugewiesen werden soll.</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>numeric</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Zus&auml;tzliche Werte.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
'math' erm&ouml;glicht es dem Designer, mathematische Gleichungen
durchzuf&uuml;hren. Alle numerischen Template-Variablen
k&ouml;nnen dazu verwendet werden und die Ausgabe wird an
die Stelle des Tags geschrieben. Die Variablen werden
der Funktion als Parameter &uuml;bergeben, dabei kann es sich
um statische oder um Template-Variablen handeln. Erlaubte Operatoren
umfassen: +, -, /, *, abs, ceil, cos, exp, floor, log, log10, max,
min, pi, pow, rand, round, sin, sqrt, srans und tan. Konsultieren Sie
die PHP-Dokumentation f&uuml;r zus&auml;tzliche Informationen zu dieser
Funktion.
</para>
<para>
Falls Sie die spezielle 'assign' Variable &uuml;bergeben, wird die
Ausgabe der 'math'-Funktion der Template-Variablen mit dem selben
Namen zugewiesen anstatt ausgegeben zu werden.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Die 'math'-Funktion ist wegen ihres Gebrauchs der 'eval()'-Funktion
&auml;usserst Ressourcen intensiv. Mathematik direkt im PHP-Skript
zu verwenden ist wesentlich performanter. Sie sollten daher
- wann immer m&ouml;glich - auf die Verwendung verzichten. Stellen
Sie jedoch auf jeden Fall sicher, dass Sie keine 'math'-Tags in 'sections'
oder anderen 'loop'-Konstrukten verwenden.
</para>
</note>
<example>
<title>math (Mathematik)</title>
<programlisting>
{* $height=4, $width=5 *}
{math equation="x + y" x=$height y=$width}
AUSGABE:
9
{* $row_height = 10, $row_width = 20, #col_div# = 2, aus Template zugewiesen *}
{math equation="height * width / division"
height=$row_height
width=$row_width
division=#col_div#}
AUSGABE:
100
{* Sie k&ouml;nnen auch Klammern verwenden *}
{math equation="(( x + y ) / z )" x=2 y=10 z=2}
AUSGABE:
6
{* Sie k&ouml;nnen als Ausgabeformat alle von sprintf unterst&ouml;tzen Definitionen verwenden *}
{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
AUSGABE:
9.44</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<sect1 id="language.function.popup.init">
<title>popup_init (Popup Initialisieren)</title>
<para>
'popup' ist eine Integration von 'overLib', einer Javascript
Library f&uuml;r 'popup'-Fenster. Dies kann verwendet werden um
Zusatzinformationen als Context-Menu oder Tooltip auszugeben.
'popup_init' muss am Anfang jedes Templates aufgerufen werden,
falls Sie planen darin die <link linkend="language.function.popup">popup</link>-Funktion
zu verwenden. Der Author von 'overLib' ist Erik Bosrup, und die
Homepage ist unter http://www.bosrup.com/web/overlib/ erreichbar.
</para>
<para>
Seit Smarty 2.1.2 wird 'overLib' NICHT mehr mitgeliefert. Laden
Sie 'overLib' herunter und platzieren Sie es in Ihrer Document Root.
Danach k&ouml;nnen Sie mit dem Attribut 'src' definieren an welcher
Stelle die Datei liegt.
</para>
<example>
<title>popup_init</title>
<programlisting>
<![CDATA[
{* popup_init must be called once at the top of the page *}
{popup_init src="/javascripts/overlib.js"}
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,412 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<sect1 id="language.function.popup">
<title>popup (Popup-Inhalt definieren)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>text</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Text/HTML der im Popup ausgegeben werden soll.</entry>
</row>
<row>
<entry>trigger</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>onMouseOver</emphasis></entry>
<entry>Definiert bei welchem Event das Popup aufgerufen werden soll. Erlaubte Werte sind: onMouseOver und onClick</entry>
</row>
<row>
<entry>sticky</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>false</emphasis></entry>
<entry>Definiert ob das Popup ge&ouml;ffnet bleiben soll bis es manuell geschlossen wird.</entry>
</row>
<row>
<entry>caption</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Definiert die &Uuml;berschrift.</entry>
</row>
<row>
<entry>fgcolor</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Hintergrundfarbe des Popups.</entry>
</row>
<row>
<entry>bgcolor</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Rahmenfarbe des Popups.</entry>
</row>
<row>
<entry>textcolor</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Farbe des Textes im Popup.</entry>
</row>
<row>
<entry>capcolor</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Farbe der Popup-&Uuml;berschrift.</entry>
</row>
<row>
<entry>closecolor</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Farbe des 'close'-Textes.</entry>
</row>
<row>
<entry>textfont</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Farbe des Textes.</entry>
</row>
<row>
<entry>captionfont</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Schriftart f&uuml;r die &Uuml;berschrift.</entry>
</row>
<row>
<entry>closefont</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Schriftart f&uuml;r den 'close'-Text.</entry>
</row>
<row>
<entry>textsize</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Schriftgr&ouml;sse des Textes.</entry>
</row>
<row>
<entry>captionsize</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Schriftgr&ouml;sse der &Uuml;berschrift.</entry>
</row>
<row>
<entry>closesize</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Schriftgr&ouml;sse des 'close'-Textes.</entry>
</row>
<row>
<entry>width</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Breite der Popup-Box.</entry>
</row>
<row>
<entry>height</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die H&ouml;he der Popup-Box.</entry>
</row>
<row>
<entry>left</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>false</emphasis></entry>
<entry>&Ouml;ffnet die Popup-Box links von Mauszeiger.</entry>
</row>
<row>
<entry>right</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>false</emphasis></entry>
<entry>&Ouml;ffnet die Popup-Box rechts von Mauszeiger.</entry>
</row>
<row>
<entry>center</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>false</emphasis></entry>
<entry>&Ouml;ffnet die Popup-Box in der Mitte des Mauszeigers.</entry>
</row>
<row>
<entry>above</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>false</emphasis></entry>
<entry>&Ouml;ffnet die Popup-Box oberhalb des Mauszeigers. Achtung: nur m&ouml;glich wenn 'height' definiert ist.</entry>
</row>
<row>
<entry>below</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>false</emphasis></entry>
<entry>&Ouml;ffnet die Popup-Box unterhalb des Mauszeigers.</entry>
</row>
<row>
<entry>border</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Rahmenbreite der Popup-Box.</entry>
</row>
<row>
<entry>offsetx</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Horizontale Distanz zum Mauszeiger bei der das Popup ge&ouml;ffnet bleibt.</entry>
</row>
<row>
<entry>offsety</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Vertikale Distanz zum Mauszeiger bei der das Popup ge&ouml;ffnet bleibt.</entry>
</row>
<row>
<entry>fgbackground</entry>
<entry>url to image</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Das Hintergundbild.</entry>
</row>
<row>
<entry>bgbackground</entry>
<entry>url to image</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>
Definiert das Bild welches verwendet werden soll um den Rahmen zu zeichnen.
Achtung: Sie m&uuml;ssen 'bgcolor' auf '' setzen, da die Farbe sonst angezeigt wird.
Achtung: Wenn sie einen 'close'-Link verwenden, wird Netscape (4.x) die Zellen
mehrfach rendern, was zu einer falschen Anzeige f&uuml;hren kann.
</entry>
</row>
<row>
<entry>closetext</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Definiert den Text des 'close'-Links.</entry>
</row>
<row>
<entry>noclose</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Zeigt den 'close'-Link nicht an.</entry>
</row>
<row>
<entry>status</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Definiert den Text der in der Browser-Statuszeile ausgegeben wird.</entry>
</row>
<row>
<entry>autostatus</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Gibt als Statusinformationen den Popup-Text aus. Achtung: Dies &uuml;berschreibt die definierten Statuswerte.</entry>
</row>
<row>
<entry>autostatuscap</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Zeigt in der Statusleiste den Wert der Popup-&Uuml;berschrift an. Achtung: Dies &uuml;berschreibt die definierten Statuswerte.</entry>
</row>
<row>
<entry>inarray</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>
Weist 'overLib' an, den Wert aus dem in 'overlib.js' definierten Array 'ol_text' zu lesen.</entry>
</row>
<row>
<entry>caparray</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Weist 'overLib' an, die &Uuml;berschrift aus dem in 'overlib.js' definierten Array 'ol_caps' zu lesen.</entry>
</row>
<row>
<entry>capicon</entry>
<entry>url</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Zeigt das &uuml;bergebene Bild vor der &Uuml;berschrift an.</entry>
</row>
<row>
<entry>snapx</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Aliniert das Popup an einem horizontalen Gitter.</entry>
</row>
<row>
<entry>snapy</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Aliniert das Popup an einem vertikalen Gitter.</entry>
</row>
<row>
<entry>fixx</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Fixiert das Popup an der definierten horizontalen Position. Achtung: &uuml;berschreibt alle anderen horizontalen Positionen.</entry>
</row>
<row>
<entry>fixy</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Fixiert das Popup an der definierten vertikalen Position. Achtung: &uuml;berschreibt alle anderen vertikalen Positionen.</entry>
</row>
<row>
<entry>background</entry>
<entry>url</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Definiert das Hintergrundbild welches anstelle des Tabellenhintergrundes verwendet werden soll.</entry>
</row>
<row>
<entry>padx</entry>
<entry>integer,integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Erzeugt horizontale Leerzeichen, um den Text platzieren zu k&ouml;nnen. Achtung: Dies ist eine 2-Parameter Funktion.</entry>
</row>
<row>
<entry>pady</entry>
<entry>integer,integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Erzeugt vertikale Leerzeichen, um den Text platzieren zu k&ouml;nnen. Achtung: Dies ist eine 2-Parameter Funktion.</entry>
</row>
<row>
<entry>fullhtml</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>L&auml;sst Sie den HTML-Code betreffend einem Hintergrundbild komplett kontrollieren.</entry>
</row>
<row>
<entry>frame</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Kontrolliert Popups in einem anderen Frame. Sehen sie die 'overLib'-Seite f&uuml;r zus&auml;tzliche Informationen zu dieser Funktion.</entry>
</row>
<row>
<entry>timeout</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>F&uuml;hrt die &uuml;bergebene Javascript-Funktion aus, und verwendet deren Ausgabe als Text f&uuml;r das Popup.</entry>
</row>
<row>
<entry>delay</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Macht, dass sich das Popup wie ein Tooltip verh&auml;lt, und nach den definierten Millisekunden verschwindet.</entry>
</row>
<row>
<entry>hauto</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>L&auml;sst 'overLib' automatisch definieren an welcher Seite (links/rechts) des Mauszeigers das Popup ausgegeben werden soll.</entry>
</row>
<row>
<entry>vauto</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>L&auml;sst 'overLib' automatisch definieren an welcher Seite (oben/unten) des Mauszeigers das Popup ausgegeben werden soll.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
'popup' wird verwendet um Javascript-Popup-Fenster zu erzeugen.
</para>
<example>
<title>popup</title>
<programlisting>
{* 'popup_init' muss am Anfang jeder Seite aufgerufen werden die 'popup' verwendet *}
{popup_init src="/javascripts/overlib.js"}
{* create a link with a popup window when you move your mouse over *}
{* ein link mit einem Popup welches ge&ouml;ffnet wird wenn die Maus &uuml;ber dem Link ist. *}
&lt;A href="mypage.html" {popup text="This link takes you to my page!"}&gt;mypage&lt;/A&gt;
{* Sie k&ouml;nnen in einem Popup text, html, links und weiteres verwenden *}
&lt;A href="mypage.html" {popup sticky=true caption="mypage contents"
text="&lt;UL&gt;&lt;LI&gt;links&lt;LI&gt;pages&lt;LI&gt;images&lt;/UL&gt;" snapx=10 snapy=10}&gt;mypage&lt;/A&gt;
AUSGABE:
(F&uuml;r Beispiele k&ouml;nnen Sie sich die Smarty Homepage anschauen.)</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,252 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.function.textformat">
<title>textformat (Textformatierung)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Attribut Name</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>style</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>aktueller Stil</entry>
</row>
<row>
<entry>indent</entry>
<entry>number</entry>
<entry>Nein</entry>
<entry><emphasis>0</emphasis></entry>
<entry>Anzahl Zeichen die f&uuml;r das einr&uuml;cken von Zeilen verwendet werden.</entry>
</row>
<row>
<entry>indent_first</entry>
<entry>number</entry>
<entry>Nein</entry>
<entry><emphasis>0</emphasis></entry>
<entry>Anzahl Zeichen die f&uuml;r das Einr&uuml;cken der ersten Zeile verwendet werden.</entry>
</row>
<row>
<entry>indent_char</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>(single space)</emphasis></entry>
<entry>Das Zeichen welches zum Einr&uuml;cken verwendet werden soll.</entry>
</row>
<row>
<entry>wrap</entry>
<entry>number</entry>
<entry>Nein</entry>
<entry><emphasis>80</emphasis></entry>
<entry>Maximale Zeilenl&auml;nge bevor die Zeile umgebrochen wird.</entry>
</row>
<row>
<entry>wrap_char</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>\n</emphasis></entry>
<entry>Das f&uuml;r Zeilenumbr&uuml;che zu verwendende Zeichen.</entry>
</row>
<row>
<entry>wrap_cut</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry><emphasis>false</emphasis></entry>
<entry>Wenn auf 'true' gesetzt, wird die Zeile an der definierten Position abgeschnitten.</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die Template-Variable welcher die Ausgabe zugewiesen werden soll.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
'textformat' ist eine Funktion um Text zu formatieren. Die Funktion
entfernt &uuml;berfl&uuml;ssige Leerzeichen und formatiert Paragrafen
indem sie die Zeilen einr&uuml;ckt und umbricht.
</para>
<para>
Sie k&ouml;nnen entweder den aktuellen Stil verwenden, oder ihn anhand
der Parameter selber definieren. Im Moment ist 'email' der einzig verf&uuml;gbare Stil.
</para>
<example>
<title>textformat (Text Formatierung)</title>
<programlisting>
{textformat wrap=40}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
AUSGABE:
This is foo. This is foo. This is foo.
This is foo. This is foo. This is foo.
This is bar.
bar foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo bar
foo foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo.
{textformat wrap=40 indent=4}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
AUSGABE:
This is foo. This is foo. This is
foo. This is foo. This is foo. This
is foo.
This is bar.
bar foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo.
bar foo bar foo foo. bar foo bar
foo foo.
{textformat wrap=40 indent=4 indent_first=4}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
AUSGABE:
This is foo. This is foo. This
is foo. This is foo. This is foo.
This is foo.
This is bar.
bar foo bar foo foo. bar foo bar
foo foo. bar foo bar foo foo. bar
foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo
bar foo foo.
{textformat style="email"}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
AUSGABE:
This is foo. This is foo. This is foo. This is foo. This is foo. This is
foo.
This is bar.
bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo
foo.
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,120 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.19 Maintainer: andreas Status: ready -->
<chapter id="language.modifiers">
<title>Variablen-Modifikatoren</title>
<para>
Variablen-Modifikatoren können auf alle Variablen angewendet
werden, um deren Inhalt zu verändern. Dazu hängen sie einfach
ein <literal>|</literal> (Pipe-Zeichen) und den Modifikatornamen an
die entsprechende Variable an. Ein Modifikator über Parameter in
seiner Arbeitsweise beinflusst werden. Diese Parameter werden dem
Modifikatorname angehängt und mit <literal>:</literal> getrennt.
</para>
<example>
<title>Modifikator Beispiel</title>
<programlisting>
<![CDATA[
{* Modifikator auf eine Variable anwenden *}
{$titel|upper}
{* Modifikator mit Parametern *}
{$title|truncate:40:"..."}
{* Modifikator auf Funktionsparameter anwenden *}
{html_table loop=$myvar|upper}
{* mit Parametern *}
{html_table loop=$myvar|truncate:40:"..."}
{* formatierung einer Zeichenkette *}
{"foobar"|upper}
{* mit date_format das aktuelle Datum formatieren *}
{"now"|date_format:"%Y/%m/%d"}
{* modifier auf eigene Funktion anwenden *}
{mailto|upper address="me@domain.dom"}
]]>
</programlisting>
</example>
<para>
Wenn Sie einen Modifikator auf ein Array anwenden, wird dieser auf
jeden Wert angewandt. Um zu erreichen, dass der Modifkator auf den
Array selbst angewendet wird, muss dem Modifikator ein
<literal>@</literal> Zeichen vorangestellt werden. Beispiel:
<literal>{$artikelTitel|@count}</literal> (gibt die Anzahl Elemente
des Arrays $artikelTitel aus.)
</para>
<para>
Modifikatoren können aus Ihrem <link
linkend="variable.plugins.dir">$plugins_dir</link> automatisch
geladen (sehen Sie dazu auch <link
linkend="plugins.naming.conventions">Naming Conventions</link>) oder
explizit registriert werden (<link
linkend="api.register.modifier">register_modifier</link>).
</para>
<para>
Zudem können alle PHP-Funktionen implizit als Modifikatoren
verwendet werden. (Das Beispiel mit dem <literal>@count</literal>
Modifier verwendet die Funktion 'count()' von PHP und keinen Smarty
Modifikator) PHP Funktionen zu verwenden eröffnet zwei Probleme:
erstens: manchmal ist die Parameter Reiehnfolge nicht
erwünscht. (<literal>{"%2.f"|sprintf:$float}</literal> funktioniert
zwar, sieht aber als
<literal>{$float|string_format:"%2.f"}</literal> das durch Smarty
geliefert wird, besser aus. Zweitens: wenn <link
linkend="variable.security">$security</link> auf TRUE gesetzt ist,
müssen alle verwendeten PHP Funktionen im <link
linkend="variable.security.settings">
$security_settings['MODIFIER_FUNCS']</link>-Array enthalten sein.
</para>
<para>
Siehe auch <link
linkend="api.register.modifier">register_modifier()</link>, <link
linkend="api.register.function">register_function()</link>, <link
linkend="plugins">Smarty durch Plugins erweitern</link> und <link
linkend="plugins.modifiers">Variablen-Modifikatoren</link>.
</para>
&designers.language-modifiers.language-modifier-capitalize;
&designers.language-modifiers.language-modifier-cat;
&designers.language-modifiers.language-modifier-count-characters;
&designers.language-modifiers.language-modifier-count-paragraphs;
&designers.language-modifiers.language-modifier-count-sentences;
&designers.language-modifiers.language-modifier-count-words;
&designers.language-modifiers.language-modifier-date-format;
&designers.language-modifiers.language-modifier-default;
&designers.language-modifiers.language-modifier-escape;
&designers.language-modifiers.language-modifier-indent;
&designers.language-modifiers.language-modifier-lower;
&designers.language-modifiers.language-modifier-nl2br;
&designers.language-modifiers.language-modifier-regex-replace;
&designers.language-modifiers.language-modifier-replace;
&designers.language-modifiers.language-modifier-spacify;
&designers.language-modifiers.language-modifier-string-format;
&designers.language-modifiers.language-modifier-strip;
&designers.language-modifiers.language-modifier-strip-tags;
&designers.language-modifiers.language-modifier-truncate;
&designers.language-modifiers.language-modifier-upper;
&designers.language-modifiers.language-modifier-wordwrap;
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,94 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.capitalize">
<title>capitalize (in Grossbuchstaben schreiben)</title>
<para>
Wird verwendet um den Anfangsbuchstaben aller Wörter in der
Variable gross (upper case) zu schreiben.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Benötigt</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>false</entry>
<entry>Bestimmt ob Wörter die Ziffern enthalten auch in
Großschreibung gewandelt werden</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>capitalize (in Grossbuchstaben schreiben)</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'diebe haben in norwegen 20 tonnen streusalz entwendet.');
?>
]]>
</programlisting>
<para>
Wobei das Template wie folgt aussieht:
</para>
<programlisting>
<![CDATA[
{$artikelTitel}
{$artikelTitel|capitalize}
]]>
</programlisting>
<para>
AUSGABE:
</para>
<screen>
<![CDATA[
diebe haben in norwegen 20 tonnen streusalz entwendet.
Diebe Haben In Norwegen 20 Tonnen Streusalz Entwendet.</programlisting>
]]>
</screen>
</example>
<para>
Siehe auch <link linkend="language.modifier.lower">lower (in
Kleinbuchstaben schreiben)</link> <link
linkend="language.modifier.upper">upper (in Grossbuchstaben
umwandeln)</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,84 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.3 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.cat">
<title>cat</title>
<para>
Dieser Wert wird der aktuellen Variable hinzugefügt.
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="cat" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Ben&ouml;tigt</entry>
<entry>Standard</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>leer/empty</emphasis></entry>
<entry>Wert der an die Variable angef&uuml;gt werden soll.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>cat</title>
<programlisting>
<![CDATA[
<?php
$smarty->assign('articleTitle', "Psychics predict world didn't end");
?>
]]>
</programlisting>
<para>
Bei folgendem index.tpl:
</para>
<programlisting>
<![CDATA[
{$articleTitle|cat:" yesterday."}
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
Psychics predict world didn't end yesterday.
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.count.characters">
<title>count_characters (Buchstaben z&auml;hlen)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Ben&ouml;tigt</entry>
<entry>Standard</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>false</entry>
<entry>Definiert ob Leerzeichen mitgez&auml;hlt werden sollen.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Wird verwendet um die Anzahl Buchstaben in einer Variable auszugeben.
</para>
<example>
<title>count_characters (Buchstaben z&auml;hlen)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|count_characters}
{$artikelTitel|count_characters:true}
AUSGABE:
20% der US-Amerikaner finden ihr Land (die USA) nicht auf der Landkarte.
61
72
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.count.paragraphs">
<title>count_paragraphs (Abs&auml;tze z&auml;hlen)</title>
<para>
Wird verwendet, um die Anzahl der Abs&auml;tze in einer Variable zu ermitteln.
</para>
<example>
<title>count_paragraphs (Paragrafen z&auml;hlen)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|count_paragraphs}
AUSGABE:
Britische Spezialeinheiten sind aufgrund eines "Navigationsfehlers" nicht wie beabsichtigt in Gibraltar an Land gegangen, sondern an einem Badestrand, der zu Spanien geh&ouml;rt.
Ein spanischer Lokf&uuml;hrer hat aus Protest gegen die Arbeitsbedingungen nach gearbeiteten acht Stunden einfach seinen Zug stehen lassen, in dem sich allerdings noch 132 Passagiere befanden.
2</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.count.sentences">
<title>count_sentences (S&auml;tze z&auml;hlen)</title>
<para>
Wird verwendet, um die Anzahl der S&auml;tze in einer Variable zu ermitteln.
</para>
<example>
<title>count_sentences (S&auml;tze z&auml;hlen)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|count_sentences}
AUSGABE:
Zwei Deutsche haben die sogenannte "Painstation" vorgestellt. Bei Fehlern im Spiel wird der Spieler durch Elektroschocks aus der Konsole bestraft. Wer l&auml;nger aush&auml;lt, hat gewonnen.
3</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.count.words">
<title>count_words (W&ouml;rter z&auml;hlen)</title>
<para>
Wird verwendet, um die Anzahl W&ouml;rter in einer Variable zu ermiteln.
</para>
<example>
<title>count_words (W&ouml;rter z&auml;hlen)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|count_words}
AUSGABE:
S&uuml;dafrika: Eine Polizistin fesselte - mangels mitgebrachter Handschellen - drei Fl&uuml;chtige mit ihrer Strumpfhose.
12</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,160 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.date.format">
<title>date_format (Datums Formatierung)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>%b %e, %Y</entry>
<entry>Das Format des ausgegebenen Datums.</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>n/a</entry>
<entry>Der Standardwert (Datum) wenn die Eingabe leer ist.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Formatiert Datum und Uhrzeit in das definierte 'strftime()'-Format.
Daten k&ouml;nnen als Unix-Timestamps, MySQL-Timestamps
und jeder Zeichenkette die aus 'Monat Tag Jahr' (von strtotime parsebar) besteht
&uuml;bergeben werden. Designer k&ouml;nnen 'date_format' verwenden,
um vollst&auml;ndige Kontrolle &uuml;ber das Format des Datums zu erhalten.
Falls das &uuml;bergebene Datum leer ist und der zweite Parameter
&uuml;bergeben wurde, wird dieser formatiert und ausgegeben.
</para>
<example>
<title>date_format (Datums Formatierung)</title>
<programlisting>
{$smarty.now|date_format}
{$smarty.now|date_format:"%A, %B %e, %Y"}
{$smarty.now|date_format:"%H:%M:%S"}
AUSGABE:
Feb 6, 2001
Tuesday, February 6, 2001
14:33:00</programlisting>
</example>
<example>
<title>'date_format' Konvertierungs Spezifikation</title>
<programlisting>
%a - abgek&uuml;rzter Name des Wochentages, abh&auml;ngig von der gesetzten Umgebung
%A - ausgeschriebener Name des Wochentages, abh&auml;ngig von der gesetzten Umgebung
%b - abgek&uuml;rzter Name des Monats, abh&auml;ngig von der gesetzten Umgebung
%B - ausgeschriebener Name des Monats, abh&auml;ngig von der gesetzten Umgebung
%c - Wiedergabewerte f&uuml;r Datum und Zeit, abh&auml;ngig von der gesetzten Umgebung
%C - Jahrhundert (Jahr geteilt durch 100, gek&uuml;rzt auf Integer, Wertebereich 00 bis 99)
%d - Tag des Monats als Zahl (Bereich 00 bis 31)
%D - so wie %m/%d/%y
%e - Tag des Monats als Dezimal-Wert, einstelligen Werten wird ein Leerzeichen voran gestellt (Wertebereich Ž 0Ž bis Ž31Ž)
%g - wie %G, aber ohne Jahrhundert.
%G - Das vierstellige Jahr entsprechend der ISO Wochennummer (siehe %V). Das gleiche Format und der gleiche Wert wie bei %Y. Besonderheit: entspricht die ISO Wochennummer dem vorhergehenden oder folgenden Jahr, wird dieses Jahr verwendet.
%h - so wie %b
%H - Stunde als Zahl im 24-Stunden-Format (Bereich 00 bis 23)
%I - Stunde als Zahl im 12-Stunden-Format (Bereich 01 bis 12)
%j - Tag des Jahres als Zahl (Bereich 001 bis 366)
%m - Monat als Zahl (Bereich 01 bis 12)
%M - Minute als Dezimal-Wert
%n - neue Zeile
%p - entweder `am' oder `pm' (abh&auml;ngig von der gesetzten Umgebung) oder die entsprechenden Zeichenketten der gesetzten Umgebung
%r - Zeit im Format a.m. oder p.m.
%R - Zeit in der 24-Stunden-Formatierung
%S - Sekunden als Dezimal-Wert
%t - Tabulator
%T - aktuelle Zeit, genau wie %H:%M:%S
%u - Tag der Woche als Dezimal-Wert [1,7], dabei ist 1 der Montag.
%U - Nummer der Woche des aktuellen Jahres als Dezimal-Wert, beginnend mit dem ersten Sonntag als erstem Tag der ersten Woche.
%V - Kalenderwoche (nach ISO 8601:1988) des aktuellen Jahres. Als Dezimal-Zahl mit dem Wertebereich 01 bis 53, wobei die Woche 01 die erste Woche mit mindestens 4 Tagen im aktuellen Jahr ist. Die Woche beginnt montags (nicht sonntags). (Benutzen Sie %G or %g f&uuml;r die Jahreskomponente, die der Wochennummer f&uuml;r den gegebenen Timestamp entspricht.)
%w - Wochentag als Dezimal-Wert, Sonntag ist 0
%W - Nummer der Woche des aktuellen Jahres, beginnend mit dem ersten Montag als erstem Tag der ersten Woche.
%x - bevorzugte Datumswiedergabe (ohne Zeit), abh&auml;ngig von der gesetzten Umgebung.
%X - bevorzugte Zeitwiedergabe (ohne Datum), abh&auml;ngig von der gesetzten Umgebung.
%y - Jahr als 2-stellige-Zahl (Bereich 00 bis 99)
%Y - Jahr als 4-stellige-Zahl inklusive des Jahrhunderts
%Z - Zeitzone, Name oder eine Abk&uuml;rzung
%% - ein %-Zeichen
BEMERKUNG F&Uuml;R PROGRAMMIERER: 'date_format' ist ein wrapper f&uuml;r PHP's 'strftime()'-Funktion.
Je nachdem auf welchem System ihr PHP kompiliert wurde, ist es durchaus m&ouml;glich, dass nicht alle
angegebenen Formatierungszeichen unterst&uuml;tzt werden. Beispielsweise stehen %e, %T, %R und %D
(eventuell weitere) auf Windowssystemen nicht zur Verf&uuml;gung.</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,69 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.default">
<title>default (Standardwert)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>leer</emphasis></entry>
<entry>Dieser Wert wird ausgegeben wenn die Variable leer ist.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Wird verwendet um den Standardwert einer Variable festzulegen.
Falls die Variable leer ist oder nicht gesetzt wurde,
wird dieser Standardwert ausgegeben.
Default (Standardwert) hat 1 Parameter.
</para>
<example>
<title>default (Standardwert)</title>
<programlisting>
{* gib "kein Titel" (ohne Anf&uuml;hrungszeichen) aus, falls '$artikelTitel' leer ist *}
{$artikelTitel|default:"kein Titel"}
AUSGABE:
kein Titel</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,108 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.escape">
<title>escape (Maskieren)</title>
<informaltable frame="all">
<tgroup cols="6">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="possible" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>M&ouml;gliche (erlaubte) Werte</entry>
<entry>Standardwerte</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>html, htmlall, url, quotes, hex, hexentity, javascript</entry>
<entry>html</entry>
<entry>Definiert die zu verwendende Maskierung.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Wird verwendet um eine Variable mit HTML, URL oder
einfachen Anf&uuml;hrungszeichen, beziehungsweise Hex oder Hex-Entit&auml;ten
zu maskieren. Hex und Hex-Entity kann verwendet werden um "mailto:"
-Links so zu ver&auml;ndern, dass sie von Web-Spiders (E-Mail Sammlern)
verborgen bleiben und dennoch les-/linkbar f&uuml;r Webbrowser bleiben.
Als Standard, wird 'HTML'-Maskierung verwendet.
</para>
<example>
<title>escape (Maskieren)</title>
<programlisting role="php">
<![CDATA[
<?php
index.php:
$smarty-&gt;assign('TitreArticle', "'Zwei Unbekannte haben im Lidl in Monheim 24 Pakete Kaffee gestohlen.'");
?>
]]>
</programlisting>
<para>
Wobei im Template folgendes steht:
</para>
<programlisting>
<![CDATA[
{$artikelTitel}
{$artikelTitel|escape}
{$artikelTitel|escape:"html"} {* maskiert &amp; &quot; &#039; &lt; &gt; *}
{$artikelTitel|escape:"htmlall"} {* maskiert ALLE html Entit&auml;ten *}
{$artikelTitel|escape:"url"}
{$artikelTitel|escape:"quotes"}
&lt;a href="mailto:{$EmailAdresse|escape:"hex"}"&gt;{$EmailAdresse|escape:"hexentity"}&lt;/a&gt;
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
'Zwei Unbekannte haben im Lidl in Monheim 24 Pakete Kaffee gestohlen.'
&amp;#039;Zwei Unbekannte haben im Lidl in Monheim 24 Pakete Kaffee gestohlen.&amp;#039;
&amp;#039;Zwei Unbekannte haben im Lidl in Monheim 24 Pakete Kaffee gestohlen.&amp;#039;
&amp;#039;Zwei Unbekannte haben im Lidl in Monheim 24 Pakete Kaffee gestohlen.&amp;#039;
%27Zwei+Unbekannte+haben+im+Lidl+in+Monheim+24+Pakete+Kaffee+gestohlen.%27
\'Zwei Unbekannte haben im Lidl in Monheim 24 Pakete Kaffee gestohlen.\'
&lt;a href=&quot;mailto:%62%6f%62%40%6d%65%2e%6e%65%74&quot;&gt;&amp;#x62;&amp;#x6f;&amp;#x62;&amp;#x40;&amp;#x6d;&amp;#x65;&amp;#x2e;&amp;#x6e;&amp;#x65;&amp;#x74;&lt;/a&gt;
]]>
</screen>
</example>
<para>
Siehe auch <link linkend="language.escaping">Smarty Parsing umgehen</link>
und <link linkend="tips.obfuscating.email">Verschleierung von E-mail Adressen</link>.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,111 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.indent">
<title>indent (Einr&uuml;cken)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry>4</entry>
<entry>Definiert die L&auml;nge der Zeichenkette die verwendet werden soll um den Text einzur&uuml;cken.</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>(ein Leerschlag)</entry>
<entry>Definiert das Zeichen, welches verwendet werden soll um den Text einzur&uuml;cken.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Wird verwendet, um eine Zeichenkette auf jeder Zeile einzur&uuml;cken.
Optionaler Parameter ist die Anzahl der Zeichen,
um die der Text einger&uuml;ckt werden soll. Standardl&auml;nge ist 4.
Als zweiten optionalen Parameter k&ouml;nnen sie ein Zeichen &uuml;bergeben,
das f&uuml;r die Einr&uuml;ckung verwendet werden soll (f&uuml;r Tabulatoren: '\t').
</para>
<example>
<title>indent (Einr&uuml;cken)</title>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|indent}
{$articleTitle|indent:10}
{$articleTitle|indent:1:"\t"}
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
Nach einer feuchtfr&ouml;hlichen Nacht fand ein Brite sein Auto
nicht mehr und meldete es als gestohlen. Ein Jahr sp&auml;ter
besuchte er den Ort wieder und erinnerte sich, dass er
das Auto nur an einem anderen Ort abgestellt hatte -
dort stand das Fahrzeug nach einem Jahr auch noch.
Nach einer feuchtfr&ouml;hlichen Nacht fand ein Brite sein Auto
nicht mehr und meldete es als gestohlen. Ein Jahr sp&auml;ter
besuchte er den Ort wieder und erinnerte sich, dass er
das Auto nur an einem anderen Ort abgestellt hatte -
dort stand das Fahrzeug nach einem Jahr auch noch.
Nach einer feuchtfr&ouml;hlichen Nacht fand ein Brite sein Auto
nicht mehr und meldete es als gestohlen. Ein Jahr sp&auml;ter
besuchte er den Ort wieder und erinnerte sich, dass er
das Auto nur an einem anderen Ort abgestellt hatte -
dort stand das Fahrzeug nach einem Jahr auch noch.
Nach einer feuchtfr&ouml;hlichen Nacht fand ein Brite sein Auto
nicht mehr und meldete es als gestohlen. Ein Jahr sp&auml;ter
besuchte er den Ort wieder und erinnerte sich, dass er
das Auto nur an einem anderen Ort abgestellt hatte -
dort stand das Fahrzeug nach einem Jahr auch noch.
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.lower">
<title>lower (in Kleinbuchstaben schreiben)</title>
<para>
Wird verwendet um eine Zeichenkette in Kleinbuchstaben auszugeben.
</para>
<example>
<title>lower (in Kleinbuchstaben schreiben)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|lower}
AUSGABE:
In Kalifornien wurde ein Hund in das W&auml;hlerverzeichnis eingetragen.
in kalifornien wurde ein hund in das w&auml;hlerverzeichnis eingetragen.</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,59 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.nl2br">
<title>nl2br</title>
<para>
Konvertiert alle Zeilenschaltungen in &lt;br /&gt; Tags. Genau wie die PHP Funktion nl2br.
</para>
<example>
<title>nl2br</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty = new Smarty;
$smarty->assign('articleTitle', "Sonne oder Regen erwartet,\nnachts dunkel.");
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Wobei index.tpl wie folgt aussieht:
</para>
<programlisting>
<![CDATA[
{$articleTitle|nl2br}
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
Sonne oder Regen erwartet,<br />nachts dunkel.
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,77 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.regex.replace">
<title>regex_replace (Ersetzen mit regul&auml;ren Ausdr&uuml;cken)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Definiert das zu ersetzende Suchmuster, als regul&auml;ren Ausdruck.</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Definiert die ersetzende Zeichenkette.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Suchen/Ersetzen mit regul&auml;ren Ausdr&uuml;cken. Folgt der Syntax von PHP's preg_replace().
</para>
<example>
<title>regex_replace (Ersetzen mit regul&auml;ren Ausdr&uuml;cken)</title>
<programlisting>
{* Ersetzt jeden Zeilenumbruch-Tabulator-Neuezeile, durch ein Leerzeichen. *}
{$artikelTitel}
{$artikelTitel|regex_replace:"/[\r\t\n]/":" "}
AUSGABE:
Ein Bankangestellter in England zerkaut aus Stress
bei der Arbeit w&ouml;chentlich 50 Kugelschreiber. Er ist deshalb in Behandlung.
Ein Bankangestellter in England zerkaut aus Stress bei der Arbeit w&ouml;chentlich 50 Kugelschreiber. Er ist deshalb in Behandlung.</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,77 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.replace">
<title>replace (Ersetzen)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die zu ersetzende Zeichenkette.</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Die ersetzende Zeichenkette.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Einfaches suchen/ersetzen in einer Variable.
</para>
<example>
<title>replace (Ersetzen)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|replace:"Fracht":"Lieferung"}
{$artikelTitel|replace:" ":" "}
AUSGABE:
Ein Holsten-Laster hat in England seine komplette Fracht verloren, die nun von jedermann aufgesammelt werden kann.
Ein Holsten-Laster hat in England seine komplette Lieferung verloren, die nun von jedermann aufgesammelt werden kann.
Ein Holsten-Laster hat in England seine komplette Fracht verloren, die nun von jedermann aufgesammelt werden kann.
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.spacify">
<title>spacify (Zeichenkette splitten)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry><emphasis>ein Leerzeichen</emphasis></entry>
<entry>Definiert die zwischen allen Zeichen einzuf&uuml;gende Zeichenkette.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
F&uuml;gt zwischen allen Zeichen einer Variablen ein Leerzeichen ein.
Eine alternativ einzuf&uuml;gende Zeichenkette kann &uuml;ber
den ersten Parameter definiert werden.
</para>
<example>
<title>spacify (Zeichenkette splitten)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|spacify}
{$artikelTitel|spacify:"^^"}
AUSGABE:
Ein Mann flog 5000 km um sich die Haare schneiden zu lassen. Grund: Seine offensichtlich begnadete Friseuse zog von den Bermudas nach England und bis dato fand er keine Neue.
E i n M a n n f l o g 5 0 0 0 k m u m s i c h d i e H a a r e s c h n e i d e n z u l a s s e n . G r u n d : S e i n e o f f e n s i c h t l i c h b e g n a d e t e F r i s e u s e z o g v o n d e n B e r m u d a s n a c h E n g l a n d u n d b i s d a t o f a n d e r k e i n e N e u e .
E^^i^^n^^ ^^M^^a^^n^^n^^ ^^f^^l^^o^^g^^ ^^5^^0^^0^^0^^ ^^k^^m^^ ^^u^^m^^ ^^s^^i^^c^^h^^ ^^d^^i^^e^^ ^^H^^a^^a^^r^^e^^ ^^s^^c^^h^^n^^e^^i^^d^^e^^n^^ ^^z^^u^^ ^^l^^a^^s^^s^^e^^n^^.^^ ^^G^^r^^u^^n^^d^^:^^ ^^S^^e^^i^^n^^e^^ ^^o^^f^^f^^e^^n^^s^^i^^c^^h^^t^^l^^i^^c^^h^^ ^^b^^e^^g^^n^^a^^d^^e^^t^^e^^ ^^F^^r^^i^^s^^e^^u^^s^^e^^ ^^z^^o^^g^^ ^^v^^o^^n^^ ^^d^^e^^n^^ ^^B^^e^^r^^m^^u^^d^^a^^s^^ ^^n^^a^^c^^h^^ ^^E^^n^^g^^l^^a^^n^^d^^ ^^u^^n^^d^^ ^^b^^i^^s^^ ^^d^^a^^t^^o^^ ^^f^^a^^n^^d^^ ^^e^^r^^ ^^k^^e^^i^^n^^e^^ ^^N^^e^^u^^e^^.^^</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.string.format">
<title>string_format (Zeichenkette formatieren)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erfoderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Ja</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>Das zu verwendende Format (sprintf).</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Wird verwendet um eine Zeichenkette, wie zum Beispiel dezimale Werte, zu formatieren.
Folgt der Formatierungs-Syntax von sprintf.
</para>
<example>
<title>string_format (Zeichenkette formatieren)</title>
<programlisting>
{$wert}
{$wert|string_format:"%.2f"}
{$wert|string_format:"%d"}
AUSGABE:
23.5787446
23.58
24</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,88 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.strip.tags">
<title>strip_tags</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Ben&ouml;tigt</entry>
<entry>Standard</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>bool</entry>
<entry>Nein</entry>
<entry>true</entry>
<entry>Definiert ob Tags durch ' ' oder '' ersetzt werden sollen.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Entfernt alle Markup tags. - Eigentlich alles zwischen &lt; und &gt;.
</para>
<example>
<title>strip_tags</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty = new Smarty;
$smarty->assign('articleTitle', "Da ein <font face="helvetica">betrunkener Mann</font> auf einem Flug ausfallend wurde, musste <b>das Flugzeug</b> auf einer kleinen Insel zwischenlanden und den Mann aussetzen.");
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
where index.tpl is:
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|strip_tags} {* same as {$articleTitle|strip_tags:true} *}
{$articleTitle|strip_tags:false}
]]>
</programlisting>
<para>
This will output:
</para>
<screen>
<![CDATA[
Da ein <font face="helvetica">betrunkener Mann</font> auf einem Flug ausfallend wurde, musste <b>das Flugzeug</b> auf einer kleinen Insel zwischenlanden und den Mann aussetzen.
Da ein betrunkener Mann auf einem Flug ausfallend wurde, musste das Flugzeug auf einer kleinen Insel zwischenlanden und den Mann aussetzen.
Da ein <font face="helvetica">betrunkener Mann</font> auf einem Flug ausfallend wurde, musste <b>das Flugzeug</b> auf einer kleinen Insel zwischenlanden und den Mann aussetzen.
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.strip">
<title>strip (Zeichenkette strippen)</title>
<para>
Ersetzt mehrfache Leerzeichen, Zeilenumbr&uuml;che und Tabulatoren durch ein Leerzeichen
oder eine alternative Zeichenkette.
</para>
<note>
<title>Achtung</title>
<para>
Falls Sie ganze Bl&ouml;cke eines Templates 'strippen' m&ouml;chten,
verwenden Sie dazu <link linkend="language.function.strip">strip</link>.
</para>
</note>
<example>
<title>strip (Zeichenkette strippen)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|strip}
{$artikelTitel|strip:"&amp;nbsp;"}
AUSGABE:
Ein 18 Jahre alter Pappkarton
erzielte bei Ebay einen Erl&ouml;s von
536 Dollar. Es war der Karton, in dem der erste Apple verpackt war.
Ein 18 Jahre alter Pappkarton erzielte bei Ebay einen Erl&ouml;s von 536 Dollar. Es war der Karton, in dem der erste Apple verpackt war.
Ein&amp;nbsp;18&amp;nbsp;Jahre&amp;nbsp;alter&amp;nbsp;Pappkarton&amp;nbsp;erzielte&amp;nbsp;bei&amp;nbsp;Ebay&amp;nbsp;einen&amp;nbsp;Erl&ouml;s&amp;nbsp;von&amp;nbsp;536&amp;nbsp;Dollar.&amp;nbsp;Es&amp;nbsp;war&amp;nbsp;der&amp;nbsp;Karton,&amp;nbsp;in&amp;nbsp;dem&amp;nbsp;der&amp;nbsp;erste&amp;nbsp;Apple&amp;nbsp;verpackt&amp;nbsp;war.</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,97 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.truncate">
<title>truncate (k&uuml;rzen)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry>80</entry>
<entry>L&auml;nge, auf die die Zeichenkette gek&uuml;rzt werden soll.</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>...</entry>
<entry> An die gek&uuml;rzte Zeichenkette anzuh&auml;ngende Zeichenkette.</entry>
</row>
<row>
<entry>3</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>false</entry>
<entry>Nur nach ganzen Worten (false) oder exakt an der definierten Stelle (true) k&uuml;rzen.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
K&uuml;rzt die Variable auf eine definierte L&auml;nge. Standardwert sind 80 Zeichen.
Als optionaler zweiter Parameter kann eine Zeichenkette &uuml;bergeben werden, welche
der gek&uuml;rzten Variable angeh&auml;ngt wird. Diese zus&auml;tzliche Zeichenkette
wird bei der Berechnung der L&auml;nge ber&uuml;cksichtigt. Normalerweise wird
'truncate' versuchen, die Zeichenkette zwischen zwei W&ouml;rtern umzubrechen. Um die
Zeichenkette exakt an der definierten Position abzuscheiden,
k&ouml;nnen sie als dritten Parameter 'true' &uuml;bergeben.
</para>
<example>
<title>truncate (k&uuml;rzen)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|truncate}
{$artikelTitel|truncate:30}
{$artikelTitel|truncate:30:""}
{$artikelTitel|truncate:30:"---"}
{$artikelTitel|truncate:30:"":true}
{$artikelTitel|truncate:30:"...":true}
AUSGABE:
George W. Bush will die frei gew&auml;hlten Mitglieder der ICANN ("Internetregierung") durch Regierungsvertreter der USA ersetzen.
George W. Bush will die frei gew&auml;hlten Mitglieder der ICANN ("Internetregierung") durch Regierungsvertreter der USA ersetzen.
George W. Bush will die frei...
George W. Bush will die frei
George W. Bush will die frei---
George W. Bush will die frei
George W. Bush will die fr...</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.upper">
<title>upper (in Grossbuchstaben umwandeln)</title>
<para>
Wandelt eine Zeichenkette in Grossbuchstaben um.
</para>
<example>
<title>upper (in Grossbuchstaben umwandeln)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|upper}
AUSGABE:
Ein 58j&auml;hriger Belgier ist nach 35 Jahren zum Sieger der Weltmeisterschaft im Querfeldeinrennen 1967 erkl&auml;rt worden - Grund: Ein damaliger Formfehler.
EIN 58J&Auml;HRIGER BELGIER IST NACH 35 JAHREN ZUM SIEGER DER WELTMEISTERSCHAFT IM QUERFELDEINRENNEN 1967 ERKL&Auml;RT WORDEN - GRUND: EIN DAMALIGER FORMFEHLER.</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,109 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.modifier.wordwrap">
<title>wordwrap (Zeilenumbruch)</title>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>Parameter Position</entry>
<entry>Typ</entry>
<entry>Erforderlich</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>integer</entry>
<entry>Nein</entry>
<entry>80</entry>
<entry>Definiert maximale L&auml;nge einer Zeile in der umzubrechenden Zeichenkette.</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>Nein</entry>
<entry>\n</entry>
<entry>Definiert das zu verwendende Zeichen.</entry>
</row>
<row>
<entry>3</entry>
<entry>boolean</entry>
<entry>Nein</entry>
<entry>false</entry>
<entry>Definiert ob die Zeichenkette nur zwischen W&ouml;rtern getrennt (false), oder auch abgeschnitten werden darf (true).</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Bricht eine Zeichenkette an einer definierten Stelle (Standardwert 80) um.
Als optionaler zweiter Parameter kann das Zeichen &uuml;bergeben werden,
welches zum Umbrechen verwendet werden soll (Standardwert '\n'). Normalerweise
bricht wordwrap nur zwischen zwei W&ouml;rtern um. Falls Sie exakt an der
definierten Stelle umbrechen wollen, &uuml;bergeben
Sie als optionalen dritten Parameter 'true'.
</para>
<example>
<title>wordwrap (Zeilenumbruch)</title>
<programlisting>
{$artikelTitel}
{$artikelTitel|wordwrap:75}
{$artikelTitel|wordwrap:50}
{$artikelTitel|wordwrap:75:"&lt;br&gt;\n"}
{$artikelTitel|wordwrap:75:"\n":true}
AUSGABE:
Eine Frau stahl in einem Bekleidungsgesch&auml;ft eine Hose und kam kurz danach zur&uuml;ck, um die Hose umzutauschen, weil die Gr&ouml;sse nicht passte.
Eine Frau stahl in einem Bekleidungsgesch&auml;ft eine Hose und kam kurz
danach zur&uuml;ck, um die Hose umzutauschen, weil die Gr&ouml;sse nicht
passte.
Eine Frau stahl in einem Bekleidungsgesch&auml;ft
eine Hose und kam kurz danach zur&uuml;ck, um die
Hose umzutauschen, weil die Gr&ouml;sse nicht
passte.
Eine Frau stahl in einem Bekleidungsgesch&auml;ft eine Hose und kam kurz&lt;br&gt;
danach zur&uuml;ck, um die Hose umzutauschen, weil die Gr&ouml;sse nicht&lt;br&gt;
passte.
Eine Frau stahl in einem Bekleidungsgesch&auml;ft eine Hose und kam kurz d
anach zur&uuml;ck, um die Hose umzutauschen, weil die Gr&ouml;sse nicht pass
te.</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: andreas Status: ready -->
<chapter id="language.variables">
<title>Variablen</title>
<para>
Smarty hat verschiedene Variablentypen, welche weiter unten
detailliert beschrieben werden. Der Typ der Variable wird durch
das Vorzeichen bestimmt.
</para>
<para>
Variablen k&ouml;nnen in Smarty direkt ausgegeben werden oder als
<link linkend="language.syntax.attributes">Argumente</link>
f&uuml;r <link
linkend="language.syntax.functions">Funktionsparameter</link> und
<link linkend="language.modifiers">Modifikatoren</link> sowie in
Bedingungen verwendet werden. Um eine Variable auszugeben,
umschliessen Sie sie mit <link
linkend="variable.left.delimiter">Trennzeichen</link>, so dass die
Variable das einzige enthaltene Element ist. Beispiele:
<programlisting>
<![CDATA[
{$Name}
{$Kontakte[zeile].Telefon}
&lt;body bgcolor="{#bgcolor#}"&gt;
]]>
</programlisting>
</para>
&designers.language-variables.language-assigned-variables;
&designers.language-variables.language-config-variables;
&designers.language-variables.language-variables-smarty;
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,201 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: andreas Status: ready -->
<sect1 id="language.assigned.variables">
<title>Aus einem PHP-Skript zugewiesene Variablen</title>
<para>
Variablen die in einem PHP Skript <link
linkend="api.assign">assigned</link> mit zugewiesen wurden, müssen
mit eine Dollar Zeichen <literal>$</literal> versehen werden. Auf
die gleiche Art werden Variablen ausgegeben, die im Template mit <link
linkend="language.function.assign">{assign}</link> zugewiesen
wurden.
</para>
<example>
<title>zugewiesene Variablen</title>
<para>PHP-Skript</para>
<programlisting role="php">
<![CDATA[
<?php
$smarty = new Smarty;
$smarty->assign('vorname', 'Andreas');
$smarty->assign('nachname', 'Halter');
$smarty->assign('treffpunkt', 'New York');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Mit folgendem index.tpl:
</para>
<programlisting>
<![CDATA[
Hallo {$vorname} {$nachname}, schön, dass Du es einrichten kannst.
<br />
{*
das hier funktioniert nicht, da bei Variablennamen auf
Gross-Kleinschreibung geachtet werden muss:
*}
Diese Woche findet das Treffen in {$treffPunkt} statt.
{* aber das hier funktioniert: *}
Diese Woche findet das Treffen in {$treffpunkt} statt.
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
Hallo Andreas Halter, schön, dass Du es einrichten kannst.
<br />
Diese Woche findet das Treffen in statt.
Diese Woche findet das Treffen in New York statt.
]]>
</screen>
</example>
<sect2 id="language.variables.assoc.arrays">
<title>Assoziative Arrays</title>
<para>
Sie können auch auf die Werte eines in PHP zugewiesenen
assoziativen Arrays zugreifen, indem Sie den Schlüssel (Indexwert)
nach einem '.'-Zeichen (Punkt) notieren.
</para>
<example>
<title>Zugriff auf Variablen eines assoziativen Arrays</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('kontakte',
array('fax' => '555-222-9876',
'email' => 'zaphod@slartibartfast.example.com',
'telefon' => array('privat' => '555-444-3333',
'mobil' => '555-111-1234')
)
);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Bei folgender index.tpl:
</para>
<programlisting>
<![CDATA[
{$kontakte.fax}<br />
{$kontakte.email}<br />
{* auch multidimensionale Arrays können so angesprochen werden *}
{$kontakte.telefon.privat}<br />
{$kontakte.telefon.mobil}<br />
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
555-222-9876<br />
zaphod@slartibartfast.example.com<br />
555-444-3333<br />
555-111-1234<br />
]]>
</screen>
</example>
</sect2>
<sect2 id="language.variables.array.indexes">
<title>Array Index</title>
<para>
Arrays können - ähnlich der PHP-Syntax - auch über ihren Index
angesprochen werden.
</para>
<example>
<title>Zugriff über den Array Index</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('kontakte', array(
'555-222-9876',
'zaphod@slartibartfast.example.com',
array('555-444-3333',
'555-111-1234')
));
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Bei folgendem index.tpl:
</para>
<programlisting>
<![CDATA[
{$kontakte[0]}<br />
{$kontakte[1]}<br />
{* auch hier sind multidimensionale Arrays möglich *}
{$kontakte[0][0]}<br />
{$kontakte[0][1]}<br />
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
555-222-9876<br />
zaphod@slartibartfast.example.com<br />
555-444-3333<br />
555-111-1234<br />
]]>
</screen>
</example>
</sect2>
<sect2 id="language.variables.objects">
<title>Objekte</title>
<para>
Attribute von aus PHP zugewiesenen Objekten können über
das '-&gt;'-Symbol erreicht werden.
</para>
<example>
<title>Zugriff auf Objekt-Attribute</title>
<programlisting>
<![CDATA[
name: {$person->name}<br />
email: {$person->email}<br />
]]>
</programlisting>
<para>
Ausgabe:
</para>
<screen>
<![CDATA[
name: Zaphod Beeblebrox<br />
email: zaphod@slartibartfast.example.com<br />
]]>
</screen>
</example>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="language.config.variables">
<title>Verwendung von Variablen aus Konfigurationsdateien</title>
<para>
Variablen, die aus einer Konfigurationsdatei geladen werden, referenziert man mit
umschliessenden '#'-Zeichen (Raute).
</para>
<example>
<title>Konfigurationsvariablen</title>
<programlisting>
&lt;html&gt;
&lt;title&gt;{#seitenTitel#}&lt;/title&gt;
&lt;body bgcolor="{#bodyHintergrundFarbe#}"&gt;
&lt;table border="{#tabelleRahmenBreite#}" bgcolor="{#tabelleHintergrundFarbe#}"&gt;
&lt;tr bgcolor="{#reiheHintergrundFarbe#}"&gt;
&lt;td&gt;Vornamen&lt;/td&gt;
&lt;td&gt;Nachnamen&lt;/td&gt;
&lt;td&gt;Adresse&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</programlisting>
</example>
<para>
Variablen aus Konfigurationsdateien k&ouml;nnen erst verwendet werden,
wenn sie aus der Datei geladen wurden. Dieser Vorgang wird im Abschnitt
<command>config_load</command> weiter unten n&auml;her erl&auml;utert.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,171 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.11 Maintainer: andreas Status: ready -->
<sect1 id="language.variables.smarty">
<title>Die reservierte {$smarty} Variable</title>
<para>
Die reservierte Variable {$smarty} wird verwendet, um auf spezielle
Template-Variablen zuzugreifen. Im Folgenden die Liste der
Variablen:
</para>
<sect2 id="language.variables.smarty.request">
<title>Request-Variablen</title>
<para>
Aud die <ulink
url="&url.php-manual;reserved.variables">Request-Variablen </ulink>
$_GET, $_POST, $_COOKIE, $_SERVER, $_ENV and $_SESSION (siehe <link
linkend="variable.request.vars.order">$request_vars_order</link>
und <link
linkend="variable.request.use.auto.globals">$request_use_auto_globals</link>
) kann wie folgt zugegriffen werden.
</para>
<example>
<title>Ausgabe der Requestvariablen (Anfragevariablen)</title>
<programlisting>
{* anzeigen der variable 'page' aus der URL oder dem FORM, welche mit GET &uuml;bertragen wurde *}
{$smarty.get.page}
{* anzeigen der variable 'page' welche mit POST &uuml;bertragen wurde *}
{$smarty.post.page}
{* anzeigen des cookies "benutzer" *}
{$smarty.cookies.benutzer}
{* anzeigen der Server-Variable "SERVER_NAME" *}
{$smarty.server.SERVER_NAME}
{* anzeigen der Environment-Variable "PATH" *}
{$smarty.env.PATH}
{* anzeigen der Session-Variable "id" *}
{$smarty.session.id}
{* anzeigen der Variable "benutzer" aus dem $_REQUEST Array (Zusammenstellung von get/post/cookie/server/env) *}
{$smarty.request.benutzer}
</programlisting>
</example>
<note>
<para>
Aus historischen Gründen kann {$SCRIPT_NAME} verwendet werden,
allerdings ist {$smarty.server.SCRIPT_NAME} die empfohlene
Variante.
</para>
</note>
</sect2>
<sect2 id="language.variables.smarty.now">
<title>{$smarty.now}</title>
<para>
Die momentane Unix-Timestamp kann über {$smarty.now} angefragt
werden. Diese Zahl ist die Summe der verstrichenen Sekunden seit
Beginn der UNIX-Epoche (1. Januar 1970) und kann zur Anzeige
direkt dem <link
linkend="language.modifier.date.format">'date_format'-Modifikator
</link> übergeben werden.
</para>
<example>
<title>Verwendung von {$smarty.now}</title>
<programlisting>
<![CDATA[
{* Verwendung des 'date_format'-Modifikators zur Anzeige der Zeit *}
{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="language.variables.smarty.const">
<title>{$smarty.const}</title>
<para>
Hiermit kann auf PHP-Konstanten zugegriffen werden. Siehe auch <link
linkend="smarty.constants">smarty constants</link>
</para>
<example>
<title>Benutzung von {$smarty.const}</title>
<programlisting>
<![CDATA[
{$smarty.const._MY_CONST_VAL}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="language.variables.smarty.capture">
<title>{$smarty.capture}</title>
<para>
Auf die mit dem <link
linkend="language.function.capture">{capture}..{/capture}</link>
Konstrukt abgefangene Ausgabe kann via {$smarty} zugegriffen
werden. Ein Beispiel dazu finden Sie im Abschnitt zu <link
linkend="language.function.capture">capture</link>.
</para>
</sect2>
<sect2 id="language.variables.smarty.config">
<title>{$smarty.config}</title>
<para>
{$smarty} kann dazu genutzt werde, um auf <link
linkend="language.config.variables">Config-Variablen</link>
zuzugreifen. {$smarty.config.foo} ist ein Synonym for {#foo#}. Im
Abschnitt <link
linkend="language.function.config.load">{config_load}</link> ist
ein Beispiel.
</para>
</sect2>
<sect2 id="language.variables.smarty.loops">
<title>{$smarty.section}, {$smarty.foreach}</title>
<para>
{$smarty} wird auch verwendet, um auf Eigenschaften von <link
linkend="language.function.section">{section}</link> und <link
linkend="language.function.foreach">foreach</link> Schleifen
zuzugreifen.
</para>
</sect2>
<sect2 id="language.variables.smarty.template">
<title>{$smarty.template}</title>
<para>
Diese Variable enth&auml;lt den Namen des gerade verarbeiteten
Templates.
</para>
</sect2>
<sect2 id="language.variables.smarty.version">
<title>{$smarty.version}</title>
<para>
Diese Variable enth&auml;lt die Smarty Versionsnummer mit der das
Template kompiliert wurde.
</para>
</sect2>
<sect2 id="language.variables.smarty.ldelim">
<title>{$smarty.ldelim}, {$smarty.rdelim}</title>
<para>
Diese Variablen dienen dazu den linken und rechten Trennzeichen
wortwörtlich auszugeben. Siehe auch <link
linkend="language.function.ldelim">{ldelim},{rdelim}</link>.
</para>
<para>
Siehe auch:
<link linkend="language.syntax.variables">Variables</link> and
<link linkend="language.config.variables">Config Variables</link>
</para>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,656 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.20 Maintainer: messju Status: ready -->
<part id="getting.started">
<title>Erste Schritte</title>
<chapter id="what.is.smarty">
<title>Was ist Smarty?</title>
<para>
Smarty ist eine Template-Engine f&uuml;r PHP. Genauer gesagt
erlaubt es die einfache Trennung von Applikations-Logik und
Design/Ausgabe. Dies ist vor allem w&uuml;nschenswert, wenn der
Applikationsentwickler nicht die selbe Person ist wie der
Designer. Nehmen wir zum Beispiel eine Webseite die Zeitungsartikel
ausgibt. Der Titel, die Einf&uuml;hrung, der Author und der Inhalt
selbst enthalten keine Informationen dar&uuml;ber wie sie
dargestellt werden sollen. Also werden sie von der Applikation an
Smarty &uuml;bergeben, damit der Designer in den Templates mit
einer Kombination von HTML- und Template-Tags die Ausgabe
(Tabellen, Hintergrundfarben, Schriftgr&ouml;ssen, Stylesheets,
etc.) gestalten kann. Falls nun die Applikation eines Tages
angepasst werden muss, ist dies f&uuml;r den Designer nicht von
Belang, da die Inhalte immer noch genau gleich &uuml;bergeben
werden. Genauso kann der Designer die Ausgabe der Daten beliebig
ver&auml;ndern, ohne dass eine &Auml;nderung der Applikation
vorgenommen werden muss. Somit können der Programmierer die
Applikations-Logik und der Designer die Ausgabe frei anpassen, ohne
sich dabei in die Quere zu kommen.
</para>
<para>
Was Smarty nicht kann: Smarty versucht nicht die gesamte Logik aus
dem Template zu verbannen. Solange die verwendete Logik
ausschließlich f&uuml;r die Ausgabe verwendet wird, kann sie auch
im Template eingebettet werden. Ein Tip: versuchen Sie
Applikations-Logik aus dem Template und Pr&auml;sentations-Logik
aus der Applikation herauszuhalten. Nur so bleibt die Applikation
auf absehbere Zeit gut skalier- und wartbar.
</para>
<para>
Einer der einzigartigen Aspekte von Smarty ist die Kompilierung der
Templates. Smarty liest die Template-Dateien und generiert daraus
neue PHP-Skripte; von da an werden nur noch diese Skripte
verwendet. Deshalb m&uuml;ssen Templates nicht f&uuml;r jeden
Seitenaufruf performance-intensiv neu geparst werden und jedes
Template kann voll von PHP Compiler-Cache L&ouml;sungen
profitieren. (Zend, <ulink url="&url.zend;">&url.zend;</ulink>;
PHP Accelerator, <ulink
url="&url.ion-accel;">&url.ion-accel;</ulink>)
</para>
<para>
Ein paar Smarty Charakteristiken
</para>
<itemizedlist>
<listitem>
<para>
Sehr schnell.
</para>
</listitem>
<listitem>
<para>
Sehr effizient, da der PHP-Parser die 'schmutzige' Arbeit
&uuml;bernimmt.
</para>
</listitem>
<listitem>
<para>
Kein Overhead durch Template-Parsing, nur einmaliges kompilieren.
</para>
</listitem>
<listitem>
<para>
Re-kompiliert nur g&auml;nderte Templates.
</para>
</listitem>
<listitem>
<para>
Sie k&ouml;nnen die Engine um <link
linkend="language.custom.functions">individuelle Funktionen</link>
und <link
linkend="language.modifiers">Variablen-Modifikatoren</link>
erweitern.
</para>
</listitem>
<listitem>
<para>
Konfigurierbare Syntax für <link
linkend="variable.left.delimiter">Template-Tags</link>: Sie
k&ouml;nnen {}, {{}}, &lt;!--{}--&gt;, etc. verwenden.
</para>
</listitem>
<listitem>
<para>
<link
linkend="language.function.if">'if/elseif/else/endif'-Konstrukte</link>
werden direkt dem PHP-Parser &uuml;bergeben. Somit k&ouml;nnen {if
...} Ausdrücke sowohl sehr einfach als auch sehr komplex sein.
</para>
</listitem>
<listitem>
<para>
Unbegrenzte Verschachtelung von <link
linkend="language.function.section">'section'</link>, 'if' und
anderen Bl&ouml;cken.
</para>
</listitem>
<listitem>
<para>
Erm&ouml;glicht die direkte <link
linkend="language.function.php">Einbettung von
PHP-Code</link>. (Obwohl es weder ben&ouml;tigt noch empfohlen
wird, da die Engine einfach erweiterbar ist.)
</para>
</listitem>
<listitem>
<para>
Eingebauter <link linkend="caching">Caching-Support</link>
</para>
</listitem>
<listitem>
<para>
Beliebige <link linkend="template.resources">Template-Quellen</link>
</para>
</listitem>
<listitem>
<para>
Eigene <link
linkend="section.template.cache.handler.func">Cache-Handling
Funktionen</link>
</para>
</listitem>
<listitem>
<para>
<link linkend="plugins">Plugin</link> Architektur
</para>
</listitem>
</itemizedlist>
</chapter>
<chapter id="installation">
<title>Installation</title>
<sect1 id="installation.requirements">
<title>Anforderungen</title>
<para>
Smarty ben&ouml;tigt einen Webserver mit PHP >=4.0.6.
</para>
</sect1>
<sect1 id="installing.smarty.basic">
<title>Basis Installation</title>
<note>
<title>Technische Bemerkung</title>
<para>
Dieser Leitfaden geht davon aus, dass Sie Ihr Webserver- und
PHP-Setup kennen und mit den Namenskonventionen f&uuml;r Dateien
und Verzeichnisse Ihres Betriebssystems vertraut sind. Im
Folgenden wird ein Unix-Dateisystem verwendet, stellen Sie also
sicher, dass sie die f&uuml;r Ihr Betriebssystem n&ouml;tigen
&Auml;nderungen vornehmen.
</para>
<para>
Das Beispiel geht davon aus, dass '/php/includes' in Ihrem
PHP-'include_path' liegt. Konsultieren Sie das PHP-Manual
f&uuml;r weiterf&uuml;hrende Informationen hierzu.
</para>
</note>
<para>
Installieren Sie als erstes die Smarty-Library Dateien (den
<filename class="directory">/libs/</filename>-Ordner der Smarty Distribution).
Diese Dateien sollten von Ihnen NICHT editiert und von allen Applikationen
verwendet werden. Sie werden nur erneuert, wenn Sie eine neue Version von
Smarty installieren.
</para>
<para>In the examples below the Smarty tarball has been unpacked to:
<itemizedlist>
<listitem><para>
<filename class="directory">/usr/local/lib/Smarty-v.e.r/</filename>
unter *nix-basierten Betriebsystemen</para></listitem>
<listitem><para> und
<filename class="directory">c:\webroot\libs\Smarty-v.e.r\</filename>
unter Windows-Umgebungen.</para></listitem>
</itemizedlist>
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Wir empfehlen keine &Auml;nderungen an den Smarty-Library Dateien
vorzunehmen. Dies macht ein m&ouml;gliches Upgrade wesentlich
einfacher. Sie m&uuml;ssen diese Dateien auch nicht anpassen, um
Smarty zu konfigurieren! Benutzen Sie für diesen Zwecke eine
Instanz der Smarty-Klasse.
</para>
</note>
<para>
Folgende Library Dateien werden mit Smarty geliefert und werden ben&ouml;tigt:
</para>
<example>
<title>Benötigte Smarty-Library Dateien</title>
<screen>
<![CDATA[
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/internals/*.php (alle)
/plugins/*.php (alle)
]]>
</screen>
</example>
<para>
Sie k&ouml;nnen diese Dateien entweder in Ihrem PHP-'include_path'
oder auch in irgend einem anderen Verzeichnis ablegen, solange die
<ulink url="&url.php-manual;define">Konstante</ulink> <link
linkend="constant.smarty.dir">SMARTY_DIR</link> auf den korrekten
Pfad zeigt. Im Folgenden werden Beispiele f&uuml;r beide
F&auml;lle aufgezeigt. SMARTY_DIR <emphasis role="bold">muss in jedem
Fall </emphasis> am Ende einen Slash ("/", unter Windows ggf. einen
Backslash "\") enthalten.
</para>
<para>
So erzeugt man eine Instanz der Smarty-Klasse im PHP-Skript:
</para>
<example>
<title>Smarty Instanz erstellen:</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
?>
]]>
</programlisting>
</example>
<para>
Versuchen Sie das Skript auszuf&uuml;hren. Wenn Sie eine
Fehlermeldung erhalten dass <filename>Smarty.class.php</filename>
nicht gefunden werden konnte, versuchen Sie folgendes:
</para>
<example>
<title>Manuelles setzen der SMARTY_DIR-Konstanten</title>
<programlisting role="php">
<![CDATA[
<?php
// *nix-Stil
define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
// Windows-Stil
define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
// Ein kleiner Hack der unter *nix und Windows funktioniert wenn Smarty
// in einem Verzeichnis 'includes/' unterhalb des Beispielskriptes liegt
define('SMARTY_DIR',str_replace("\\","/",getcwd()).'/includes/Smarty-v.e.r/libs/');
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
?>
]]>
</programlisting>
</example>
<example>
<title>SMARTY_DIR manuell setzen</title>
<programlisting role="php">
<![CDATA[
<?php
define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;
?>
]]>
</programlisting>
</example>
<example>
<title>Absoluter Pfad &uuml;bergeben</title>
<programlisting role="php">
<![CDATA[
<?php
require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;
?>
]]>
</programlisting>
</example>
<example>
<title>Library Verzeichnis dem Include-Pfad hinzuf&uuml;gen</title>
<programlisting role="php">
<![CDATA[
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; *nix: "/path1:/path2"
include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/"
; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"
]]>
</programlisting>
</example>
<example>
<title>Library Verzeichnis dem Include-Pfad mit
<literal><ulink url="&url.php-manual;ini-set">ini_set()</ulink></literal> hinzuf&uuml;gen</title>
<programlisting role="php">
<![CDATA[
<?php
// *nix
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/local/lib/Smarty-v.e.r/libs/');
// windows
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/');
?>
]]>
</programlisting>
</example>
<para>
Jetzt, wo die Library Dateien an ihrem Platz sind, wird es Zeit,
die Smarty Verzeichnisse zu erstellen.
</para>
<para>
F&uuml;r unser Beispiel werden wir die Smarty Umgebung f&uuml;r
eine G&auml;stebuch-Applikation konfigurieren. Wir verwenden den
Applikationsnamen nur, um die Verzeichnis-Struktur zu
verdeutlichen. Sie k&ouml;nnen die selbe Umgebung f&uuml;r alle
Ihre Applikationen verwenden indem Sie 'guestbook' durch dem Namen
Ihrer Applikation ersetzen.
</para>
<para>
Stellen Sie sicher, dass Sie die DocumentRoot Ihres Webservers
kennen. In unserem Beispiel lautet sie
'/web/www.domain.com/docs/'.
</para>
<para>
Die Smarty Verzeichnisse werden in den Klassen-Variablen <link
linkend="variable.template.dir">$template_dir</link>, <link
linkend="variable.compile.dir">$compile_dir</link>, <link
linkend="variable.config.dir">$config_dir</link> und <link
linkend="variable.cache.dir">$cache_dir</link> definiert. Die
Standardwerte sind: <filename
class="directory">templates</filename>, <filename
class="directory">templates_c</filename>, <filename
class="directory">configs</filename> und <filename
class="directory">cache</filename>. F&uuml;r unser Beispiel legen
wir alle diese Verzeichnisse unter <filename
class="directory">/web/www.domain.com/smarty/guestbook/</filename>
an.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Wir empfehlen, diese Verzeichnisse ausserhalb der DocumentRoot
anzulegen, um m&ouml;gliche Direktzugriffe zu verhindern.
</para>
</note>
<para>
In Ihrer DocumentRoot muss mindestens eine Datei liegen, die
f&uuml;r Browser zug&auml;nglich ist. Wir nennen dieses Skript
<filename>index.php</filename>, und legen es in das Verzeichnis
<filename class="directory">/guestbook/</filename> in unserer
DocumentRoot.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Bequem ist es, den Webserver so zu konfigurieren, dass
<filename>index.php</filename> als Standard-Verzeichnis-Index
verwendet wird. Somit kann man das Skript direkt mit
'http://www.domain.com/guestbook/' aufrufen. Falls Sie Apache
verwenden, l&auml;sst sich dies konfigurieren indem Sie
<filename>index.php</filename> als letzten Eintrag f&uuml;r
<emphasis>DirectoryIndex</emphasis> verwenden. (Jeder Eintrag
muss mit einem Leerzeichen abgetrennt werden).
</para>
</note>
<para>
Die Dateistruktur bis jetzt:
</para>
<example>
<title>Beispiel der Dateistruktur</title>
<screen>
<![CDATA[
/usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty/Config_File.class.php
/usr/local/lib/php/Smarty/debug.tpl
/usr/local/lib/php/Smarty/plugins/*.php
/usr/local/lib/php/Smarty/core/*.php
/web/www.example.com/smarty/guestbook/templates/
/web/www.example.com/smarty/guestbook/templates_c/
/web/www.example.com/smarty/guestbook/configs/
/web/www.example.com/smarty/guestbook/cache/
/web/www.example.com/docs/guestbook/index.php
]]>
</screen>
</example>
<note>
<title>Technische Bemerkung</title>
<para>
Falls Sie kein Caching und keine Konfigurationsdateien verwenden,
ist es nicht erforderlich die Verzeichnisse '$config_dir' und
'$cache_dir' zu erstellen. Es wird jedoch trotzdem empfohlen, da
diese Funktionalit&auml;ten eventuell sp&auml;ter genutzt werden
sollen.
</para>
</note>
<para>
Smarty ben&ouml;tigt <emphasis
role="bold">Schreibzugriff</emphasis> auf die Verzeichnisse <link
linkend="variable.compile.dir">$compile_dir</link> und <link
linkend="variable.cache.dir">$cache_dir</link>. Stellen Sie also
sicher, dass der Webserver-Benutzer (normalerweise Benutzer
'nobody' und Gruppe 'nogroup') in diese Verzeichnisse schreiben
kann. (In OS X lautet der Benutzer normalerweise 'www' und ist in
der Gruppe 'www'). Wenn Sie Apache verwenden, k&ouml;nnen Sie in
der httpd.conf (gewöhnlich in '/usr/local/apache/conf/')
nachsehen, unter welchem Benutzer Ihr Server l&auml;uft.
</para>
<example>
<title>Dateirechte einrichten</title>
<programlisting role="shell">
<![CDATA[
chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/
chmod 770 /web/www.example.com/smarty/guestbook/templates_c/
chown nobody:nobody /web/www.example.com/smarty/guestbook/cache/
chmod 770 /web/www.example.com/smarty/guestbook/cache/
]]>
</programlisting>
</example>
<note>
<title>Technische Bemerkung</title>
<para>
'chmod 770' setzt ziemlich strenge Rechte und erlaubt nur dem
Benutzer 'nobody' und der Gruppe 'nobody' Lese-/Schreibzugriff
auf diese Verzeichnisse. Falls Sie die Rechte so setzen
m&ouml;chten, dass auch andere Benutzer die Dateien lesen
k&ouml;nnen (vor allem f&uuml;r Ihren eigenen Komfort), so
erreichen Sie dies mit 775.
</para>
</note>
<para>
Nun m&uuml;ssen wir die <filename>index.tpl</filename> Datei
erstellen, welche Smarty laden soll. Die Datei wird in Ihrem
<link linkend="variable.template.dir">$template_dir</link>
abgelegt.
</para>
<example>
<title>Editieren von /web/www.example.com/smarty/guestbook/templates/index.tpl</title>
<screen>
<![CDATA[
{* Smarty *}
Hallo {$name}, herzlich Willkommen!
]]>
</screen>
</example>
<note>
<title>Technische Bemerkung</title>
<para>
{* Smarty *} ist ein <link
linkend="language.syntax.comments">Template-Kommentar</link>. Der
wird zwar nicht ben&ouml;tigt, es ist jedoch eine gute Idee jedes
Template mit einem Kommentar zu versehen. Dies erleichtert die
Erkennbarkeit des Templates, unabh&auml;ngig von der verwendeten
Dateierweiterung. (Zum Beispiel f&uuml;r Editoren die
Syntax-Highlighting unterst&uuml;tzen.)
</para>
</note>
<para>
Als n&auml;chstes editieren wir die Datei
<filename>index.php</filename>. Wir erzeugen eine Smarty-Instanz,
weisen dem Template mit <link linkend="api.assign">assign()</link>
eine Variable zu und geben <filename>index.tpl</filename> mit
<link linkend="api.display">display</link> aus.
</para>
<example>
<title>Editieren von /web/www.example.com/docs/guestbook/index.php</title>
<programlisting role="php">
<![CDATA[
<?php
define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$smarty->assign('name','Ned');
//** Die folgende Zeile "einkommentieren" um die Debug-Konsole anzuzeigen
//$smarty->debugging = true;
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<note>
<title>Technische Bemerkung</title>
<para>
In unserem Beispiel verwenden wir durchwegs absolute Pfadnamen zu
den Smarty-Verzeichnissen. Falls <filename
class="directory">/web/www.example.com/smarty/guestbook/</filename>
in Ihrem PHP-'include_path' liegt, w&auml;re dies nicht
n&ouml;tig. Es ist jedoch effizienter und weniger
fehleranf&auml;llig die Pfade absolut zu setzen. Und es
garantiert, dass Smarty die Templates aus dem geplanten
Verzeichnis l&auml;dt.
</para>
</note>
<para>
Wenn Sie <filename>index.php</filename> nun in Ihrem Webbrowser
&ouml;ffnen, sollte 'Hallo, Ned, herzlich Willkommen!' ausgegeben werden.
</para>
<para>
Die Basis-Installation von Smarty w&auml;re somit beendet.
</para>
</sect1>
<sect1 id="installing.smarty.extended">
<title>Erweiterte Konfiguration</title>
<para>
Dies ist eine Weiterf&uuml;hrung der <link
linkend="installing.smarty.basic">Basis Installation</link>, bitte
lesen Sie diese zuerst!
</para>
<para>
Ein flexiblerer Weg um Smarty aufzusetzen ist, die Klasse zu
erweitern und eine eigene Smarty-Umgebung zu
initialisieren. Anstatt immer wieder die Verzeichnisse zu
definieren, kann diese Aufgabe auch in einer einzigen Datei
erledigt werden. Beginnen wir, indem wir ein neues Verzeichnis
namens '/php/includes/guestbook/' erstellen und eine Datei namens
'setup.php' darin anlegen.
</para>
<example>
<title>Editieren von /php/includes/guestbook/setup.php</title>
<programlisting role="php">
<![CDATA[
<?php
// Smarty Library Dateien laden
define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php');
// ein guter Platz um Applikations spezifische Libraries zu laden
// require('guestbook/guestbook.lib.php');
class Smarty_GuestBook extends Smarty {
function Smarty_GuestBook()
{
// Konstruktor. Diese Werte werden f&uuml;r jede Instanz automatisch gesetzt
$this->Smarty();
$this->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$this->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$this->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$this->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$this->caching = true;
$this->assign('app_name','Guest Book');
}
}
?>
]]>
</programlisting>
</example>
<note>
<title>Technische Bemerkung</title>
<para>
In unserem Beispiel werden die Library Dateien ausserhalb der
DocumentRoot abgelegt. Diese Dateien k&ouml;nnten sensitive
Informationen enthalten, die wir nicht zug&auml;nglich machen
m&ouml;chten. Deshalb legen wir alle Library Dateien in
'/php/includes/guestbook/' ab und laden sie in unserem 'setup.php'
Skript, wie Sie im oben gezeigten Beispiel sehen k&ouml;nnen.
</para>
</note>
<para>
Nun passen wir <filename>index.php</filename> an, um 'setup.php'
zu verwenden:
</para>
<example>
<title>Editieren von /web/www.example.com/docs/guestbook/index.php</title>
<programlisting role="php">
<![CDATA[
<?php
require('guestbook/setup.php');
$smarty = new Smarty_GuestBook;
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<para>
Wie Sie sehen k&ouml;nnen, ist es sehr einfach eine Instanz von
Smarty zu erstellen. Mit Hilfe von Smarty_GuestBook werden alle
Variablen automatisch initialisiert.
</para>
</sect1>
</chapter>
</part>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,6 +0,0 @@
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<!ENTITY SMARTYManual "Smarty - die kompilierende PHP Template-Engine">
<!ENTITY SMARTYDesigners "Smarty f&uuml;r Template Designer">
<!ENTITY SMARTYProgrammers "Smarty f&uuml;r Programmierer">
<!ENTITY Appendixes "Anh&auml;nge">

View File

@@ -1,29 +0,0 @@
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: andreas Status: ready -->
<!ENTITY note.parameter.merge '<note>
<title>Technische Bemerkung</title>
<para>
Der <parameter>merge</parameter> Parameter ber&uuml;ksichtigt Array
Keys. Das bedeutet, dass numerisch indizierte Arrays sich
gegenseitig &uuml;berschreiben k&ouml;nnen, oder die Keys nicht
sequentiell ausgegeben werden. Dies, im Gegensatz zur PHP Funktion
<ulink url="&url.php-manual;array_merge">array_merge()</ulink>, die
numerische Keys neu sortiert.
</para>
</note>'>
<!ENTITY parameter.compileid '<para>
Als optionaler dritter Parameter, k&ouml;nnen sie die
<parameter>$compile_id</parameter> angeben. Dies ist sinnvoll, wenn
Sie verschiedene Versionen der komipilerten Templates f&uuml;r
verschiedene Sprachen unterhalten wollen. Weiter ist dieser Parameter
n&uuml;tzlich, wenn Sie mehrere
<link linkend="variable.template.dir">$template_dir</link> Verzeichnisse,
aber nur ein <link linkend="variable.compile.dir">$compile_dir</link>
nutzen. Setzen Sie <parameter>$compile_id</parameter> f&uuml;r jedes
Template Verzeichnis, da gleichnamige Templates sich sonst
&uuml;berschreiben. Sie k&ouml;nnen die
<link linkend="variable.compile.id">$compile_id</link> auch nur einmal,
global setzen.
</para>'>

View File

@@ -1,7 +0,0 @@
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<!ENTITY livedocs.author 'Autoren:<br />'>
<!ENTITY livedocs.editors 'Editiert von:<br />'>
<!ENTITY livedocs.copyright 'Copyright &copy; %s - %s'>
<!ENTITY livedocs.published 'Publiziert am %s'>

View File

@@ -1,86 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.3 Maintainer: andreas Status: ready -->
<preface id="preface">
<title>Vorwort</title>
<para>
Die Frage, wie man die Applikations-Logik eines PHP-Scriptes vom
Layout trennt, ist unzweifelhaft eines der am h&auml;figsten
diskutierten Themen. Da PHP als "in HTML eingebettete
Scripting-Sprache" angepriesen wird, ergibt sich nach einigen
Projekten in denen man HTML und PHP gemischt hat schnell die Idee,
Funktionalit&auml;t und Darstellung zu trennen. Dazu kommt, dass in
vielen Firmen Applikationsentwickler und Designer nicht die selbe
Person sind. In Konsequenz beginnt die Suche nach einer
Template-Lösung.
</para>
<para>
Als Beispiel: In unserer Firma funktioniert die Entwicklung einer
Applikation wie folgt: Nachdem die Spezifikationen erstellt sind,
entwickelt der Interface Designer einen Prototypen des Interfaces
und &uuml;bergibt dieses dem Programmierer. Der Programmierer
implementiert die Gesch&auml;ftslogik in PHP und verwendet den
Interface-Prototypen zur Erstellung eines Template-Skeletts.
Danach &uuml;bergibt der Programmierer die Templates dem
HTML/Webseiten-Designer welcher ihnen den letzten Schliff
verleiht. Das Projekt kann mehrfach zwischen dem Programmieren und
dem Designer ausgetauscht werden. Deshalb ist es wichtig, dass die
Trennung von Logik und Design klar stattfindet. Der Programmierer
will sich normalerweise nicht mit HTML herumschlagen m&uuml;ssen
und m&ouml;chte auch nicht, dass der Designer seinen PHP-Code
ver&auml;ndert. Designer selbst ben&ouml;tigen
Konfigurationsdateien, dynamische Bl&ouml;cke und andere Interface
spezifische Eigenheiten, m&ouml;chten aber auch nicht direkt mit
PHP in Ber&uuml;hrung kommen.
</para>
<para>
Die meisten Template-Engines die heutzutage angeboten werden,
bieten eine rudiment&auml;re M&ouml;glichkeit Variablen in einem
Template zu ersetzen und beherschen eine eingeschr&auml;nkte
Funktionalit&auml;t f&uuml;r dynamische Bl&ouml;cke. Unsere
Anforderungen forderten jedoch ein wenig mehr. Wir wollten
erreichen, dass sich Programmierer &uuml;berhaupt nicht um HTML
Layouts k&uuml;mmern m&uuml;ssen. Dies war aber fast
unumg&auml;nglich. Wenn ein Designer zum Beispiel alternierende
Farben in einer Tabelle einsetzen wollte, musste dies vorhergehend
mit dem Programmierer abgesprochen werden. Wir wollten weiter, dass
dem Designer Konfigurationsdateien zur Verf&uuml;gung st&uuml;nden,
aus denen er Variablen f&uuml;r seine Templates extrahieren
kann. Die Liste ist endlos.
</para>
<para>
Wir begannen 1999 mit der Spezifikation der Template
Engine. Nachdem dies erledigt war, fingen wir an eine Engine in C
zu schreiben, die - so hofften wir - in PHP eingebaut
w&uuml;rde. Nach einer hitzigen Debatte dar&uuml;ber was eine
Template Engine k&ouml;nnen sollte und was nicht, und nachdem wir
feststellen mussten, dass ein paar komplizierte technische Probleme
auf uns zukommen w&uuml;rden, entschlossen wir uns die Template
Engine in PHP als Klasse zu realisieren, damit sie von jederman
verwendet und angepasst werden kann. So schrieben wir also eine
Engine, die wir <productname>SmartTemplate</productname> nannten
(anm: diese Klasse wurde nie ver&ouml;ffentlicht). SmartTemplate
erlaubte uns praktisch alles zu tun was wir uns vorgenommen hatten:
normale Variablen-Ersetzung, M&ouml;glichkeiten weitere Templates
einzubinden, Integration von Konfigurationsdateien, Einbetten von
PHP-Code, limitierte 'if'-Funktionalit&auml;t und eine sehr robuste
Implementation von dynamischen Bl&ouml;cken die mehrfach
verschachtelt werden konnten. All dies wurde mit Regul&auml;ren
Ausdr&uuml;cken erledigt und der Sourcecode wurde ziemlich
un&uuml;bersichtlich. F&uuml;r gr&ouml;ssere Applikationen war die
Klasse auch bemerkenswert langsam, da das Parsing bei jedem Aufruf
einer Seite durchlaufen werden musste. Das gr&ouml;sste Problem
aber war, dass der Programmierer das Setup, die Templates und
dynamische Bl&ouml;cke in seinem PHP-Skript definieren musste. Die
n&auml;chste Frage war: wie k&ouml;nnen wir dies weiter
vereinfachen?
</para>
<para>
Dann kam uns die Idee, aus der schließlich Smarty wurde. Wir wussten
wie schnell PHP-Code ohne den Overhead des Template-Parsing ist. Wir wussten
ebenfalls wie pedantisch PHP aus Sicht eines durchschnittlichen
Designers ist und dass dies mit einer einfacheren Template-Syntax
verborgen werden kann. Was w&auml;re also, wenn wir diese
beiden St&auml;rken vereinten? Smarty war geboren...
</para>
</preface>

View File

@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<chapter id="advanced.features">
<title>Advanced Features</title>
&programmers.advanced-features.advanced-features-objects;
&programmers.advanced-features.advanced-features-prefilters;
&programmers.advanced-features.advanced-features-postfilters;
&programmers.advanced-features.advanced-features-outputfilters;
&programmers.advanced-features.section-template-cache-handler-func;
&programmers.advanced-features.template-resources;
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,130 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: andreas Status: ready -->
<sect1 id="advanced.features.objects">
<title>Objekte</title>
<para>
Smarty erlaubt es, auf <ulink
url="&url.php-manual;object">PHP-Objekte</ulink> durch das Template
zuzugreifen. Dafür gibt es zwei Wege. Der erste ist, Objekte zu
<link linkend="api.register.object">registrieren</link> und wie auf
eine <link linkend="language.custom.functions">eigene
Funktion</link> zuzugreifen. Der andere Weg ist, das Objekt dem
Template mit <link linkend="api.assign">assign()</link> zuzuweisen
und darauf wie auf andere Variablen zuzugreifen. Die erste Methode
hat eine nettere Template Syntax und ist sicherer da der Zugriff auf
ein registriertes Objekt mit Sicherheitseinstellungen kontrolliert
werden kann. Der Nachteil ist, dass über registrierte Objekte nicht
in einer Schlaufe gelaufen werden kann und, dass es nicht möglich
ist, Arrays registrierten Objekten anzulegen. Welchen Weg Sie
einschlagen wird von Ihren Bedürfnissen definiert, die erste Methode
ist jedoch zu bevorzugen.
</para>
<para>
Wenn die <link
linkend="variable.security">Sicherheitsfunktionen</link>
eingeschaltet sind, können keine private Methoden (solche die einen
'_'-Prefix tragen) aufgerufen werden. Wenn eine Methode und eine
Eigeschaft mit dem gleichen Namen existieren wird die Methode
verwendet.
</para>
<para>
Sie können den Zugriff auf Methoden und Eigenschaften
einschränken indem Sie sie als Array als dritten
Registrationsparameter übergeben.
</para>
<para>
Normalerweise werden Parameter welche einem Objekt via Template
übergeben werden genau so übergeben wie dies bei normalen <link
linkend="language.custom.functions">eigenen Funktionen</link> der
Fall ist. Das erste Objekt ist ein assoziatives Array und das
zweite das Smarty Objekt selbst. Wenn Sie die Parameter einzeln
erhalten möchten können Sie den vierten Parameter auf
<literal>false</literal> setzen.
</para>
<para>
Der optionale fünfte Parameter hat nur einen Effekt wenn
<parameter>format</parameter> = <literal>true</literal> ist und eine
Liste von Methoden enthält die als Block verarbeitet werden sollen.
Das bedeutet, dass solche Methoden ein schliessendes Tag im Template
enthalten müssen
(<literal>{foobar->meth2}...{/foobar->meth2}</literal>) und die
Parameter zu den Funktionen die selbe Syntax haben wie
block-function-plugins: sie erhalten also die 4 Parameter
<parameter>$params</parameter>,
<parameter>$content</parameter>,
<parameter>&amp;$smarty</parameter> und
<parameter>&amp;$repeat</parameter>,
und verhalten sich auch sonst wie block-function-plugins.
</para>
<example>
<title>registierte oder zugewiesene Objekte verwenden</title>
<programlisting role="php">
<![CDATA[
<?php
// Das Objekt
class My_Object {
function meth1($params, &$smarty_obj) {
return "meine meth1";
}
}
$myobj = new My_Object;
// Objekt registrieren (referenz)
$smarty->register_object("foobar",$myobj);
// Zugriff auf Methoden und Eigeschaften einschränken
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
// wenn wir das traditionelle Parameterformat verwenden wollen, übergeben wir false für den Parameter format
$smarty->register_object("foobar",$myobj,null,false);
// Objekte zuweisen (auch via Referenz möglich)
$smarty->assign_by_ref("myobj", $myobj);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Und hier das dazugehörige index.tpl:
</para>
<programlisting>
<![CDATA[
{* Zugriff auf ein registriertes objekt *}
{foobar->meth1 p1="foo" p2=$bar}
{* Ausgabe zuweisen *}
{foobar->meth1 p1="foo" p2=$bar assign="output"}
ausgabe war: {$output}
{* auf unser zugewiesenes Objekt zugreifen *}
{$myobj->meth1("foo",$bar)}
]]>
</programlisting>
</example>
<para>
Siehe auch <link
linkend="api.register.object">register_object()</link> und <link
linkend="api.assign">assign()</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,67 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<sect1 id="advanced.features.outputfilters">
<title>Ausgabefilter</title>
<para>
Wenn ein Template mit 'display()' oder 'fetch()' benutzt wird, kann die
Ausgabe durch verschieden Ausgabefilter geschleust werden. Der Unterschied zu
'post'-Filtern ist, dass Ausgabefilter auf die durch 'fetch()' oder
'display()' erzeugte Ausgabe angewendet werden, 'post'-Filter aber auf das Kompilat vor
seiner Speicherung im Dateisystem.
</para>
<para>
Ausgabefilter k&ouml;nnen auf verschiede Arten
geladen werden. Man kann sie <link linkend="api.register.prefilter">registrieren</link>,
aus dem Plugin-Verzeichnis mit <link linkend="api.load.filter">load_filter()</link> laden
oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden.
Smarty &uuml;bergibt der Funktion als ersten Parameter die Template-Ausgabe und erwartet
als R&uuml;ckgabewert die bearbeitete Ausgabe.
</para>
<example>
<title>Ausgabefilter verwenden</title>
<programlisting role="php">
<![CDATA[
<?php
// fügen Sie folgende Zeilen in Ihre Applikation ein
function protect_email($tpl_output, &$smarty)
{
$tpl_output = preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
'$1%40$2', $tpl_output);
return $tpl_output;
}
// Ausgabefilter registrieren
$smarty->register_outputfilter("protect_email");
$smarty->display("index.tpl");
// von nun an erhalten alle ausgegebenen e-mail Adressen einen
// einfach Schutz vor Spambots.
?>
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,64 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<sect1 id="advanced.features.postfilters">
<title>Postfilter</title>
<para>
Template Postfilter sind Filter, welche auf das Template nach dessen Kompilierung
angewendet werden. Postfilter können auf verschiedene Arten
geladen werden. Man kann sie <link linkend="api.register.prefilter">registrieren</link>,
aus dem Plugin-Verzeichnis mit <link linkend="api.load.filter">load_filter()</link> laden
oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden.
Smarty übergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet
als Rückgabewert den bearbeiteten Quellcode.
</para>
<example>
<title>Template Postfilter verwenden</title>
<programlisting>
<![CDATA[
<?php
// fügen Sie folgende Zeilen in Ihre Applikation ein
function add_header_comment($tpl_source, &$smarty)
{
return "<?php echo \"<!-- Created by Smarty! -->\n\" ?>\n".$tpl_source;
}
// registrieren Sie den Postfilter
$smarty->register_postfilter("add_header_comment");
$smarty->display("index.tpl");
?>
{* kompiliertes Smarty Template 'index.tpl' *}
<!-- Created by Smarty! -->
{* Rest des Template Inhalts... *}
]]>
</programlisting>
</example>
<para>
Sie auch <link
linkend="api.register.postfilter">register_postfilter()</link>,
<link linkend="advanced.features.prefilters">Prefilter</link> und
<link linkend="api.load.filter">load_filter()</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.3 Maintainer: andreas Status: ready -->
<sect1 id="advanced.features.prefilters">
<title>Prefilter</title>
<para>
Template Prefilter sind Filter, welche auf das Template vor dessen Kompilierung
angewendet werden. Dies ist nützlich, um zum Beispiel Kommentare zu entfernen
oder um den Inhalt des Templates zu analysieren. Prefilter können auf verschiedene
Arten geladen werden. Man kann sie <link linkend="api.register.prefilter">registrieren</link>,
aus dem Plugin-Verzeichnis mit <link linkend="api.load.filter">load_filter()</link> laden
oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden.
Smarty übergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet
als Rückgabewert den bearbeiteten Quellcode.
</para>
<example>
<title>Template Prefilter verwenden</title>
<para>
Dieser Prefiler entfernt alle Kommentare aus dem Template-Quelltext
</para>
<programlisting>
<![CDATA[
<?php
// fügen Sie folgende Zeilen in Ihre Applikation ein
function remove_dw_comments($tpl_source, &$smarty)
{
return preg_replace("/<!--#.*-->/U",'',$tpl_source);
}
// registrieren Sie den Prefilter
$smarty->register_prefilter("remove_dw_comments");
$smarty->display("index.tpl");
?>
{* Smarty Template 'index.tpl' *}
<!--# diese Zeile wird vom Prefilter entfernt-->
]]>
</programlisting>
</example>
<para>
Sie auch <link
linkend="api.register.prefilter">register_prefilter()</link>,
<link linkend="advanced.features.postfilters">Postfilter</link> und
<link linkend="api.load.filter">load_filter()</link>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,164 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.3 Maintainer: andreas Status: ready -->
<sect1 id="section.template.cache.handler.func">
<title>Cache Handler Funktion</title>
<para>
Als Alternative zum normalen dateibasierten Caching-Mechanismus können Sie
eine eigene Cache-Handler Funktion zum lesen, schreiben und löschen von
Cache-Dateien definieren.
</para>
<para>
Schreiben Sie eine Funktion in Ihrer Applikation, die Smarty als
Cache-Handler verwenden soll und weisen Sie deren Name der Variable
<link linkend="variable.cache.handler.func">$cache_handler_func</link> zu.
Smarty wird von da an Ihre Funktion zur Bearbeitung des Caches verwenden.
Als erster Parameter wird die 'action' mit einem der folgendende Werte
übergeben: 'read', 'write' und 'clear'. Als zweiter Parameter
wird das Smarty-Objekt übergeben, als dritter der gecachte Inhalt. Bei einem
'write' übergibt Smarty den gecachten Inhalt, bei 'read' übergibt Smarty die
Variable als Referenz und erwartet, dass Ihre Funktion die Inhalte zuweist.
Bei 'clear' können Sie eine dummy-Variable übergeben. Als vierter Parameter
wird der Template-Name übergeben (verwendet bei 'write'/'read'), als fünfter
Parameter die 'cache_id' (optional) und als sechster die 'compile_id' (auch optional).
</para>
<para>
Der letzte Parameter (<parameter>$exp_time</parameter>) wurde in
Smarty-2.6.0 hinzugefügt.
</para>
<example>
<title>Beispiel mit einer MySQL Datenbank als Datenquelle</title>
<programlisting role="php">
<![CDATA[
<?php
/*
Beispiel Anwendung:
include('Smarty.class.php');
include('mysql_cache_handler.php');
$smarty = new Smarty;
$smarty->cache_handler_func = 'mysql_cache_handler';
$smarty->display('index.tpl');
die Datenbank hat folgendes Format:
create database SMARTY_CACHE;
create table CACHE_PAGES(
CacheID char(32) PRIMARY KEY,
CacheContents MEDIUMTEXT NOT NULL
);
*/
function mysql_cache_handler($action, &amp;$smarty_obj, &amp;$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null)
{
// Datenbank Host, Benutzer und Passwort festlegen
$db_host = 'localhost';
$db_user = 'myuser';
$db_pass = 'mypass';
$db_name = 'SMARTY_CACHE';
$use_gzip = false;
// enmalige 'cache_id' erzeugen
$CacheID = md5($tpl_file.$cache_id.$compile_id);
if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
$smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
return false;
}
mysql_select_db($db_name);
switch ($action) {
case 'read':
// Cache aus der Datenbank lesen
$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
}
$row = mysql_fetch_array($results,MYSQL_ASSOC);
if($use_gzip &amp;&amp; function_exists("gzuncompress")) {
$cache_contents = gzuncompress($row["CacheContents"]);
} else {
$cache_contents = $row["CacheContents"];
}
$return = $results;
break;
case 'write':
// Cache in Datenbank speichern
if($use_gzip &amp;&amp; function_exists("gzcompress")) {
// compress the contents for storage efficiency
$contents = gzcompress($cache_content);
} else {
$contents = $cache_content;
}
$results = mysql_query("replace into CACHE_PAGES values(
'$CacheID',
'".addslashes($contents)."')
");
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
}
$return = $results;
break;
case 'clear':
// Cache Informationen löschen
if(empty($cache_id) &amp;&amp; empty($compile_id) &amp;&amp; empty($tpl_file)) {
// alle löschen
$results = mysql_query("delete from CACHE_PAGES");
} else {
$results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
}
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
}
$return = $results;
break;
default:
// Fehler, unbekannte 'action'
$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
$return = false;
break;
}
mysql_close($link);
return $return;
}
?>
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

View File

@@ -1,229 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready -->
<sect1 id="template.resources">
<title>Ressourcen</title>
<para>
Ein Template kann aus verschiedenen Quellen bezogen werden. Wenn Sie
ein Template mit 'display()' ausgeben, die Ausgabe mit 'fetch()'
in einer Variablen speichern oder innnerhalb eines Template ein
weiteres Template einbinden, m&uuml;ssen Sie den Ressourcen-Typ,
gefolgt von Pfad und Template-Namen angeben. Wenn kein Resourcetyp angegeben
wird, wird <link linkend="variable.default.resource.type">$default_resource_type</link>
verwendet.
</para>
<sect2 id="templates.from.template.dir">
<title>Templates aus dem '$template_dir'</title>
<para>
Templates aus dem '$template_dir' ben&ouml;tigen normalerweise keinen Ressourcen-Typ,
es wird jedoch empfohlen 'file:' zu verwenden. &Uuml;bergeben Sie einfach den Pfad,
in dem sich das Template relativ zu '$template_dir' befindet.
</para>
<example>
<title>Templates aus '$template_dir' verwenden</title>
<programlisting>
// im PHP-Skript
$smarty->display("index.tpl");
$smarty->display("admin/menu.tpl");
$smarty->display("file:admin/menu.tpl"); // entspricht der vorigen Zeile
{* im Smarty Template *}
{include file="index.tpl"}
{include file="file:index.tpl"} {* entspricht der vorigen Zeile *}</programlisting>
</example>
</sect2>
<sect2 id="templates.from.any.dir">
<title>Templates aus beliebigen Verzeichnissen</title>
<para>
Templates ausserhalb von '$template_dir' ben&ouml;tigen den 'file:' Ressourcen-Typ,
gefolgt von absolutem Pfadnamen und Templatenamen.
</para>
<example>
<title>Templates aus beliebigen Verzeichnissen benutzen</title>
<programlisting>
// im PHP-Skript
$smarty->display("file:/export/templates/index.tpl");
$smarty->display("file:/path/to/my/templates/menu.tpl");
{* im Smarty Template *}
{include file="file:/usr/local/share/templates/navigation.tpl"}</programlisting>
</example>
<sect3 id="templates.windows.filepath">
<title>Windows Dateipfade</title>
<para>
Wenn Sie auf einer Windows-Maschine arbeiten, enthalten absoluten Dateipfade
normalerweise den Laufwerksbuchstaben (C:). Stellen Sie sicher,
dass alle Pfade den Ressourcen-Typ 'file:' haben, um Namespace-Konflikten
vorzubeugen.
</para>
<example>
<title>Templates aus Windows Dateipfaden verwenden</title>
<programlisting>
// im PHP-Skript
$smarty->display("file:C:/export/templates/index.tpl");
$smarty->display("file:F:/path/to/my/templates/menu.tpl");
{* im Smarty Template *}
{include file="file:D:/usr/local/share/templates/navigation.tpl"}</programlisting>
</example>
</sect3>
</sect2>
<sect2 id="templates.from.elsewhere">
<title>Templates aus anderen Quellen</title>
<para>
Sie k&ouml;nnen Templates aus jeder f&uuml;r PHP verf&uuml;gbaren Datenquelle beziehen:
Datenbanken, Sockets, LDAP, usw. Dazu m&uuml;ssen sie nur ein
Ressource-Plugin schreiben und registrieren.
</para>
<para>
Konsultieren Sie den Abschnitt &uuml;ber <link linkend="plugins.resources">Ressource-Plugins</link>
f&uuml;r mehr Informationen &uuml;ber die Funktionalit&auml;ten, die ein derartiges Plugin bereitstellen muss.
</para>
<note>
<para>
Achtung: Sie k&ouml;nnen die interne <literal>file</literal> Ressource nicht
&uuml;berschreiben. Es steht Ihnen jedoch frei, ein Plugin zu schreiben,
das die gew&uuml;nschte Funktionalit&auml;t implementiert und es als alternativen
Ressource-Typ zu registrieren.
</para>
</note>
<example>
<title>Eigene Quellen verwenden</title>
<programlisting>
// im PHP-Skript
// definieren Sie folgende Funktion in Ihrer Applikation
function db_get_template ($tpl_name, &amp;tpl_source, &amp;$smarty_obj)
{
// Datenbankabfrage um unser Template zu laden,
// und '$tpl_source' zuzuweisen
$sql = new SQL;
$sql->query("select tpl_source
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_source = $sql->record['tpl_source'];
return true;
} else {
return false;
}
}
function db_get_timestamp($tpl_name, &amp;$tpl_timestamp, &amp;$smarty_obj)
{
// Datenbankabfrage um '$tpl_timestamp' zuzuweisen
$sql = new SQL;
$sql->query("select tpl_timestamp
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_timestamp = $sql->record['tpl_timestamp'];
return true;
} else {
return false;
}
}
function db_get_secure($tpl_name, &amp;$smarty_obj)
{
// angenommen alle Templates sind sicher
return true;
}
function db_get_trusted($tpl_name, &amp;$smarty_obj)
{
// wird f&uuml;r Templates nicht verwendet
}
// Ressourcen-Typ 'db:' registrieren
$smarty->register_resource("db", array("db_get_template",
"db_get_timestamp",
"db_get_secure",
"db_get_trusted"));
// Ressource im PHP-Skript verwenden
$smarty->display("db:index.tpl");
{* Ressource in einem Smarty Template verwenden *}
{include file="db:/extras/navigation.tpl"}</programlisting>
</example>
</sect2>
<sect2 id="default.template.handler.function">
<title>Standard Template-Handler</title>
<para>
Sie k&ouml;nnen eine Funktion definieren, die aufgerufen wird,
wenn ein Template nicht aus der angegeben Ressource geladen werden konnte.
Dies ist z. B. n&uuml;tzlich, wenn Sie fehlende Templates on-the-fly
generieren wollen.
</para>
<example>
<title>Standard Template-Handler verwenden</title>
<programlisting>
&lt;?php
// f&uuml;gen Sie folgende Zeilen in Ihre Applikation ein
function make_template ($resource_type, $resource_name, &amp;$template_source, &amp;$template_timestamp, &amp;$smarty_obj)
{
if( $resource_type == 'file' ) {
if ( ! is_readable ( $resource_name )) {
// erzeuge Template-Datei, gib Inhalte zur&uuml;ck
$template_source = "This is a new template.";
$template_timestamp = time();
$smarty_obj->_write_file($resource_name, $template_source);
return true;
}
} else {
// keine Datei
return false;
}
}
// Standard Handler definieren
$smarty->default_template_handler_func = 'make_template';
?&gt;</programlisting>
</example>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

Some files were not shown because too many files have changed in this diff Show More