nextmatch_widget:

- 2 header-templates left and right from the range-display
- optional nextmatch-line with arrows, search, cats, ... after the rows
link_widget:
- new sub-type link-string
Updateted the documenations and lang-files.
This commit is contained in:
Ralf Becker 2003-06-29 17:00:05 +00:00
parent a205036c1d
commit 7073ae95c2
8 changed files with 155 additions and 43 deletions

View File

@ -14,7 +14,7 @@ body { background-color: white; color: black; }
</head>
<body>
<h1>eTemplate - Templates and Dialog-Editor for phpGroupware</h1>
<h3>by Ralf Becker <a href="mailto:RalfBecker@outdoor-training.de">RalfBecker@outdoor-training.de</a></h3>
<h3>by Ralf Becker <a href="#" onClick="document.location='mai'+'lto:RalfBecker'+unescape('%40')+'outdoor-training'+unescape('%2E')+'de'; return false;">RalfBecker AT outdoor-training DOT de</a></h3>
<p>A developers tutorial how to write an application with the new eTemplates.<br>
It is also an introduction how to write a phpgw- and setup(3)-compatible app.</p>
<hr>
@ -146,7 +146,7 @@ Create the file <b>/et_media/index.php</b> with the following content:</p>
<span>/**************************************************************************\
* phpGroupWare - eTemplates - Tutoria Example - a simple MediaDB *
* http://www.phpgroupware.org *
* Written by Ralf Becker &lt;RalfBecker@outdoor-training.de> *
* Written by Ralf Becker &lt;RalfBecker AT outdoor-training DOT de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
@ -472,7 +472,7 @@ a new version automaticaly.</p>
<a href="../../setup/doc/setup3.html">docu of setup3</a> in the doc-dir of the setup app.
</ol>
<h2><i>That's it</i> - please <a href="mailto:RalfBecker@outdoor-training.de">contact me</a> if you have further questions or comments about the tutorial</h2>
<h2><i>That's it</i> - please <a href="#" onClick="document.location='mai'+'lto:RalfBecker'+unescape('%40')+'outdoor-training'+unescape('%2E')+'de'; return false;">contact me</a> if you have further questions or comments about the tutorial</h2>
</body>
</html>

View File

@ -14,7 +14,7 @@ body { background-color: white; color: black; }
</head>
<body>
<h1>eTemplate-Referenz - Templates and Dialog-Editor for phpGroupware</h1>
<h3>by Ralf Becker <a href="mailto:RalfBecker@outdoor-training.de">RalfBecker@outdoor-training.de</a></h3>
<h3>by Ralf Becker <a href="#" onClick="document.location='mai'+'lto:RalfBecker'+unescape('%40')+'outdoor-training'+unescape('%2E')+'de'; return false;">RalfBecker AT outdoor-training DOT de</a></h3>
<p>A referenz documentation about the new eTemplates and the <a href="#referenz">syntax and parameters</a>
of the several widgets.</p>
<hr>
@ -213,6 +213,8 @@ implement only a subset of XUL. Here are the main differences:</p>
<td>
This attribute controls certain aspects of the different widgets. It's meaning and xml / xul-values
are document with the widgets.
If the options-string starts with a '@' it is replaced by the value of the content-array at this
index (with the '@'-removed).
</td>
</tr>
<tr>
@ -659,16 +661,22 @@ implement only a subset of XUL. Here are the main differences:</p>
<tr>
<td colspan="5">
<pre>
$content[$id] = array( <span>// I = value set by the app, 0 = value on return / output, </span>
$content[$id] = array( <span>// I = value set by the app, 0 = value on return / output</span>
'get_rows' => <span>// I method/callback to request the data for the rows eg. 'notes.bo.get_rows'</span>
'filter_label' => <span>// I label for filter (optional)</span>
'filter_help' => <span>// I help-msg for filter (optional)</span>
'no_filter' => True <span>// I disable the 1. filter</span>
'no_filter2' => True <span>// I disable the 2. filter (params are the same as for filter)</span>
'no_cat' => True <span>// I disable the cat-selectbox</span>
'template' => <span>// I template to use for the rows, if not set via options</span>
'header_left' => <span>// I template to show left of the range-value, left-aligned (optional)</span>
'header_right' => <span>// I template to show right of the range-value, right-aligned (optional)</span>
'bottom_too' => True <span>// I show the nextmatch-line (arrows, filters, search, ...) again after the rows</span>
'start' => <span>// IO position in list</span>
'cat_id' => <span>// IO category, if not 'no_cat' => True</span>
'search' => <span>// IO search pattern</span>
'filter' => <span>// IO filter, if not 'no_filter' => True</span>
'filter2' => <span>// IO filter2, if not 'no_filter2' => True</span>
'rows' => <span>// O content set by callback</span>
'total' => <span>// O the total number of entries</span>
);
@ -742,7 +750,41 @@ function index($content = 0)
</pre>
</td>
</tr>
<tr>
<td><b>LinkWidgets</b></td>
<td>
&lt;link type="link-to" id="name"/><p>
&lt;link type="link-list" id="name"/><p>
&lt;link type="link-string" id="name"/><p>
</td>
<td>no</td>
<td>link-to<p>link-list<p>link-string</td>
<td>
These widget are the UI-part of the link-class ({bo|so}link) in InfoLog and maybe the API soon.<p>
<b>link-to</b><br>
Widget to make a links to other entries of link-aware apps and to attach files.<p>
<b>link-list</b><br>
Widget to shows the links to an entry and a Unlink Button for each link. <p>
<i><u>Note</u>:</i> Both Widgets can be used on the same template with the <u>same</u> name. They share
the content of that variable, which contains just the id of the entry in the current app.<p>
<b>link-string</b><br>
Comma-separated list of link-titles with a link to its view-method, value is like the return
of bolink::get_links().
</td>
</tr>
</table>
<h3>One remark about cross-site-scripting</h3>
The following eTemplate Widgets are parsing its content before displaying through <b>htmlentities()</b> to
correctly display the content and to gard against malecious data (like scripts etc.):
<ul>
<li>Label
<li>Text, Textarea
<li>Integer, Float
<li>SelectBoxes (it's options-strings)
<li>LinkWidgets: link-to, link-list, link-string
</ul>
This is done in most cases by the underlaying html-class and not direct in eTemplate.
<p>
<hr>
<a name="extensions">
@ -751,9 +793,10 @@ function index($content = 0)
eTemplates to define the UI of the new widget and are stored in the eTemplate's inc-dir or the inc-dir of a
phpGroupWare application. The editor and the etemplate-class autoload the existing extensions.</p>
<i>I will made more documentation about the interface availible soon.</i>
<i>I will made more documentation about the interface availible soon. For now have a look for the source
of the existing extensions.</i>
<h2>please <a href="mailto:RalfBecker@outdoor-training.de">contact me</a> if you have further questions or comments about the eTemplates</h2>
<h2>please <a href="#" onClick="document.location='mai'+'lto:RalfBecker'+unescape('%40')+'outdoor-training'+unescape('%2E')+'de'; return false;">contact me</a> if you have further questions or comments about the eTemplates</h2>
</body>
</html>

View File

@ -15,10 +15,11 @@
/*!
@class link_widget
@author ralfbecker
@abstract link-to: widget that enable you to make a link to an other entry of a link-aware app
@abstract link-list: widget that shows the links to an entry and a Unlink Button for each entry
@abstract link-to: Widget to create links to an other entries of link-aware apps
@abstract link-list: Widget to shows the links to an entry and a Unlink Button for each link
@abstract link-string: comma-separated list of link-titles with a link to its view method, value is like get_links()
@discussion This widget is independent of the UI as it only uses etemplate-widgets and has therefor no
@discussion render-function.
render-function.
*/
class link_widget
{
@ -28,7 +29,8 @@
);
var $human_name = array( // this are the names for the editor
'link-to' => 'LinkTo',
'link-list' => 'LinkList'
'link-list' => 'LinkList',
'link-string' => 'LinkString'
);
var $debug = False;
@ -39,6 +41,24 @@
function pre_process($name,&$value,&$cell,&$readonlys,&$extension_data,&$tmpl)
{
if ($cell['type'] == 'link-string')
{
$str = '';
if (is_array($value))
{
foreach ($value as $link)
{
$str .= ($str !== '' ? ', ' : '') . $tmpl->html->a_href(
htmlentities($this->link->title($link['app'],$link['id'])),
$this->link->view($link['app'],$link['id'],$link));
}
}
$cell['type'] = 'html';
$cell['readonly'] = True; // is allways readonly
$value = $str;
return True;
}
if (!is_array($value))
{
$value = array(

View File

@ -70,10 +70,20 @@
($value['no_filter'] || !$value['filter'] || $value['filter'] == 'none') &&
($value['no_filter2'] || !$value['filter2'] || $value['filter2'] == 'none'))
{ // disable whole nextmatch line if no scrolling necessary
if ($value['header_left'] || $value['header_right'])
{
$nextmatch = new etemplate('etemplate.nextmatch_widget.header_only');
$cell['size'] = $cell['name'];
$cell['obj'] = &$nextmatch;
$cell['name'] = $nextmatch->name;
}
else
{
$cell['size'] = $cell['name'].'[rows]';
$cell['obj'] = &$value['template'];
$cell['name'] = $value['template']->name;
}
}
else
{
$nextmatch = new etemplate('etemplate.nextmatch_widget');
@ -108,6 +118,8 @@
// save values in persistent extension_data to be able use it in post_process
$extension_data = $value;
$value['bottom'] = $value; // copy the values for the bottom-bar
return False; // NO extra Label
}
@ -120,6 +132,26 @@
$loop = False;
$value['start'] = $old_value['start']; // need to be set, to be reported back
if (is_array($value['bottom'])) // we have a second bottom-bar
{
$inputs = array('search','cat_id','filter','filter2');
foreach($inputs as $name)
{
if (isset($value['bottom'][$name]) && $value['bottom'][$name] != $old_value[$name])
{
$value[$name] = $value['bottom'][$name];
}
}
$buttons = array('start_search','first','left','right','last');
foreach($buttons as $name)
{
if (isset($value['bottom'][$name]) && $value['bottom'][$name])
{
$value[$name] = $value['bottom'][$name];
}
}
unset($value['bottom']);
}
if ($value['start_search'] ||
isset($value['cat_id']) && $value['cat_id'] != $old_value['cat_id'] ||
$old_value['filter'] != '' && isset($value['filter']) && $value['filter'] != $old_value['filter'] ||

View File

@ -500,8 +500,14 @@
$ext_type = $type;
$extra_label = $this->extensionPreProcess($ext_type,$form_name,$value,$cell,$readonlys[$name]);
$readonly = $readonly || $cell['readonly']; // might be set be extension
$this->set_array($content,$name,$value);
}
$cell_options = $cell['size'];
if ($cell_options[0] == '@')
{
$cell_options = $this->get_array($content,substr($cell_options,1));
}
$label = $this->expand_name($cell['label'],$show_c,$show_row,$content['.c'],$content['.row'],$content);
$help = $cell['help'];
if ($help[0] == '@')
@ -535,7 +541,7 @@
case 'label': // size: [[b]old][[i]talic][,link]
if (is_array($value))
break;
list($style,$extra_link) = explode(',',$cell['size']);
list($style,$extra_link) = explode(',',$cell_options);
$value = strlen($value) > 1 && !$cell['no_lang'] ? lang($value) : $value;
$value = nl2br(htmlentities($value));
if ($value != '' && strstr($style,'b')) $value = $this->html->bold($value);
@ -543,15 +549,15 @@
$html .= $value;
break;
case 'html':
$extra_link = $cell['size'];
$extra_link = $cell_options;
$html .= $value;
break;
case 'int': // size: [min][,[max][,len]]
case 'float':
list($min,$max,$cell['size']) = explode(',',$cell['size']);
if ($cell['size'] == '')
list($min,$max,$cell_options) = explode(',',$cell_options);
if ($cell_options == '')
{
$cell['size'] = $cell['type'] == 'int' ? 5 : 8;
$cell_options = $cell['type'] == 'int' ? 5 : 8;
}
// fall-through
case 'text': // size: [length][,maxLength]
@ -562,20 +568,20 @@
else
{
$html .= $this->html->input($form_name,$value,'',
$options.$this->html->formatOptions($cell['size'],'SIZE,MAXLENGTH'));
$options.$this->html->formatOptions($cell_options,'SIZE,MAXLENGTH'));
$GLOBALS['phpgw_info']['etemplate']['to_process'][$form_name] = $cell['type'];
}
break;
case 'textarea': // Multiline Text Input, size: [rows][,cols]
$html .= $this->html->textarea($form_name,$value,
$options.$this->html->formatOptions($cell['size'],'ROWS,COLS'));
$options.$this->html->formatOptions($cell_options,'ROWS,COLS'));
if (!$readonly)
$GLOBALS['phpgw_info']['etemplate']['to_process'][$form_name] = $cell['type'];
break;
case 'checkbox':
if (!empty($cell['size']))
if (!empty($cell_options))
{
list($true_val,$false_val,$ro_true,$ro_false) = explode(',',$cell['size']);
list($true_val,$false_val,$ro_true,$ro_false) = explode(',',$cell_options);
$value = $value == $true_val;
}
else
@ -596,12 +602,12 @@
$html .= $this->html->input($form_name,'1','CHECKBOX',$options);
$GLOBALS['phpgw_info']['etemplate']['to_process'][$form_name] = array(
'type' => $cell['type'],
'values' => $cell['size']
'values' => $cell_options
);
}
break;
case 'radio': // size: value if checked
$set_val = $this->expand_name($cell['size'],$show_c,$show_row,$content['.c'],$content['.row'],$content);
$set_val = $this->expand_name($cell_options,$show_c,$show_row,$content['.c'],$content['.row'],$content);
if ($value == $set_val)
{
@ -635,7 +641,7 @@
}
else
{
list($img,$ro_img) = explode(',',$cell['size']);
list($img,$ro_img) = explode(',',$cell_options);
if (!empty($img))
{
$options .= ' TITLE="'.(strlen($label)<=1||$cell['no_lang']?$label:lang($label)).'"';
@ -649,7 +655,7 @@
$GLOBALS['phpgw_info']['etemplate']['to_process'][$form_name] = $cell['type'];
break;
case 'hrule':
$html .= $this->html->hr($cell['size']);
$html .= $this->html->hr($cell_options);
break;
case 'template': // size: index in content-array (if not full content is past further on)
if (is_object($cell['name']))
@ -680,7 +686,7 @@
{
echo "<p>show_cell::template(tpl=$this->name,name=$cell[name]): $obj_read</p>\n";
}
if ($this->autorepeat_idx($cell,$show_c,$show_row,$idx,$idx_cname) || $cell['size'] != '')
if ($this->autorepeat_idx($cell,$show_c,$show_row,$idx,$idx_cname) || $cell_options != '')
{
if ($span == '' && isset($content[$idx]['span']))
{ // this allows a colspan in autorepeated cells like the editor
@ -706,7 +712,7 @@
break;
case 'select': // size:[linesOnMultiselect]
$sels = array();
list($multiple) = explode(',',$cell['size']);
list($multiple) = explode(',',$cell_options);
if (!empty($multiple) && 0+$multiple <= 0)
{
$sels[''] = $multiple < 0 ? lang('all') : lang($multiple);
@ -760,7 +766,7 @@
$image = $this->html->image(substr($this->name,0,strpos($this->name,'.')),
$image,strlen($label) > 1 && !$cell['no_lang'] ? lang($label) : $label,'BORDER="0"');
$html .= $image;
$extra_link = $cell['size'];
$extra_link = $cell_options;
$extra_label = False;
break;
case 'file':
@ -776,7 +782,7 @@
$box_row = 1;
$box_col = 'A';
$box_anz = 0;
for ($n = 1; $n <= $cell['size']; ++$n)
for ($n = 1; $n <= $cell_options; ++$n)
{
$h = $this->show_cell($cell[$n],$content,$sel_options,$readonlys,$cname,$show_c,$show_row,$nul);
if ($h != '' && $h != '&nbsp;')
@ -804,14 +810,14 @@
if ($box_anz > 1) // a single cell is NOT placed into a table
{
$html = "\n\n<!-- BEGIN $cell[type] -->\n\n".
$this->html->table($rows,$this->html->formatOptions($cell['size'],',CELLPADDING,CELLSPACING').
($cell['align'] ? ' WIDTH="100%"' : '')). // alignment only works if table has full width
$this->html->table($rows,$this->html->formatOptions($cell_options,',CELLPADDING,CELLSPACING').
($cell['align'] && $type == 'vbox' ? ' WIDTH="100%"' : '')). // alignment only works if table has full width
"\n\n<!-- END $cell[type] -->\n\n";
}
break;
case 'deck':
for ($n = 1; $n <= $cell['size'] && (empty($value) || $value != $cell[$n]['name']); ++$n) ;
if ($n > $cell['size'])
for ($n = 1; $n <= $cell_options && (empty($value) || $value != $cell[$n]['name']); ++$n) ;
if ($n > $cell_options)
{
$value = $cell[1]['name'];
}
@ -823,10 +829,10 @@
{
$s_height = "height: $s_height".(substr($s_height,-1) != '%' ? 'px' : '').';';
}
for ($n = 1; $n <= $cell['size']; ++$n)
for ($n = 1; $n <= $cell_options; ++$n)
{
$h = $this->show_cell($cell[$n],$content,$sel_options,$readonlys,$cname,$show_c,$show_row,$nul);
$vis = !empty($value) && $value == $cell['size'][$n]['name'] || $n == 1 && $first ? 'visible' : 'hidden';
$vis = !empty($value) && $value == $cell_options[$n]['name'] || $n == 1 && $first ? 'visible' : 'hidden';
list (,$cl) = explode(',',$cell[$n]['span']);
$html .= $this->html->div($h,$this->html->formatOptions(array(
$cl.($cl ? ' ':'').'tab_body',

View File

@ -1,5 +1,5 @@
<?php
// eTemplates for Application 'etemplate', generated by etemplate.dump() 2003-05-30 20:55
// eTemplates for Application 'etemplate', generated by etemplate.dump() 2003-06-29 18:47
/* $Id$ */
@ -129,3 +129,7 @@ $templ_data[] = array('name' => 'etemplate.tab_widget','template' => '','lang' =
$templ_data[] = array('name' => 'etemplate.link_widget.search','template' => '','lang' => '','group' => '0','version' => '0.9.15.003','data' => 'a:3:{i:0;a:2:{s:2:\"c1\";s:6:\"row_on\";s:2:\"c2\";s:7:\"row_off\";}i:1;a:4:{s:1:\"A\";a:5:{s:4:\"type\";s:6:\"select\";s:5:\"label\";s:6:\"Search\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:3:\"app\";s:4:\"help\";s:26:\"Select an App to search in\";}s:1:\"B\";a:4:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:2:\"25\";s:4:\"name\";s:5:\"query\";s:4:\"help\";s:22:\"Enter a search pattern\";}s:1:\"C\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:6:\"Search\";s:4:\"name\";s:6:\"search\";s:4:\"help\";s:30:\"Click here to start the search\";}s:1:\"D\";a:4:{s:4:\"type\";s:5:\"label\";s:4:\"span\";s:10:\",error_msg\";s:5:\"label\";s:29:\"Nothing found - try again !!!\";s:4:\"name\";s:3:\"msg\";}}i:2;a:4:{s:1:\"A\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:11:\"attach file\";}s:1:\"B\";a:3:{s:4:\"type\";s:4:\"file\";s:4:\"name\";s:4:\"file\";s:4:\"help\";s:69:\"Enter filename to upload and attach, use [Browse...] to search for it\";}s:1:\"C\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:6:\"Upload\";s:4:\"name\";s:6:\"upload\";s:4:\"help\";s:29:\"Click here to upload the file\";}s:1:\"D\";a:1:{s:4:\"type\";s:5:\"label\";}}}','size' => '','style' => '.error_msg { font-style: italic; color: red; }','modified' => '1054320872',);
$templ_data[] = array('name' => 'etemplate.nextmatch_widget','template' => '','lang' => '','group' => '0','version' => '0.9.15.007','data' => 'a:5:{i:0;a:3:{s:1:\"A\";s:3:\"40%\";s:1:\"C\";s:3:\"40%\";s:2:\"h4\";s:13:\",!@bottom_too\";}i:1;a:3:{s:1:\"A\";a:2:{s:4:\"type\";s:8:\"template\";s:4:\"name\";s:12:\"@header_left\";}s:1:\"B\";a:5:{s:4:\"type\";s:4:\"hbox\";s:4:\"size\";s:1:\"2\";s:5:\"align\";s:6:\"center\";i:1;a:4:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:7:\"showing\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:5:\"range\";}i:2;a:4:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:2:\"of\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:5:\"total\";}}s:1:\"C\";a:3:{s:4:\"type\";s:8:\"template\";s:5:\"align\";s:5:\"right\";s:4:\"name\";s:13:\"@header_right\";}}i:2;a:3:{s:1:\"A\";a:4:{s:4:\"type\";s:8:\"template\";s:4:\"span\";s:3:\"all\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:33:\"etemplate.nextmatch_widget.nm_row\";}s:1:\"B\";a:2:{s:4:\"type\";s:5:\"label\";s:8:\"onchange\";s:1:\"1\";}s:1:\"C\";a:1:{s:4:\"type\";s:5:\"label\";}}i:3;a:3:{s:1:\"A\";a:5:{s:4:\"type\";s:8:\"template\";s:4:\"size\";s:4:\"rows\";s:4:\"span\";s:3:\"all\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:9:\"@template\";}s:1:\"B\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"C\";a:1:{s:4:\"type\";s:5:\"label\";}}i:4;a:3:{s:1:\"A\";a:5:{s:4:\"type\";s:8:\"template\";s:4:\"size\";s:6:\"bottom\";s:4:\"span\";s:3:\"all\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:33:\"etemplate.nextmatch_widget.nm_row\";}s:1:\"B\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"C\";a:1:{s:4:\"type\";s:5:\"label\";}}}','size' => '100%','style' => '','modified' => '1056897420',);
$templ_data[] = array('name' => 'etemplate.nextmatch_widget.header_only','template' => '','lang' => '','group' => '0','version' => '0.9.15.001','data' => 'a:3:{i:0;a:2:{s:1:\"A\";s:3:\"50%\";s:1:\"B\";s:3:\"50%\";}i:1;a:2:{s:1:\"A\";a:2:{s:4:\"type\";s:8:\"template\";s:4:\"name\";s:12:\"@header_left\";}s:1:\"B\";a:3:{s:4:\"type\";s:8:\"template\";s:5:\"align\";s:5:\"right\";s:4:\"name\";s:13:\"@header_right\";}}i:2;a:2:{s:1:\"A\";a:5:{s:4:\"type\";s:8:\"template\";s:4:\"size\";s:4:\"rows\";s:4:\"span\";s:3:\"all\";s:5:\"align\";s:6:\"center\";s:4:\"name\";s:9:\"@template\";}s:1:\"B\";a:1:{s:4:\"type\";s:5:\"label\";}}}','size' => '100%','style' => '','modified' => '1056877177',);

View File

@ -1,6 +1,6 @@
%1 disabled etemplate de %1 deaktiviert
%1 etemplates deleted etemplate de %1 eTemplates gelöscht
%1 etemplates found etemplate de %1 eTemplates gefunden
%1 disabled etemplate de %1 deaktiviert
%1 needed etemplate de %1 benötigt
%1 notranslation etemplate de %1 nicht übersetzen
%1 onchange etemplate de %1 onChange
@ -22,7 +22,7 @@ border etemplate de Rand
border-line-thickness for the table-tag etemplate de Randbreite (border) für die Tabelle
can have special sql-value null etemplate de darf speziellen SQL Wert NULL annehmen
cancel etemplate de Abbruch
category etemplate de Kategori
category etemplate de Kategorie
cellpadding for the table-tag etemplate de Innenabstand (cellpadding) der Tabelle
cells etemplate de Zellen
cellspacing for the table-tag etemplate de Zellenabstand (cellspacing) der Tabelle
@ -51,6 +51,7 @@ db-tools etemplate de DB-Tools
deck etemplate de Deck (intern)
default etemplate de Vorgabe
delete etemplate de Löschen
delete a single entry by passing the id. etemplate de
delete all selected etemplates, without further inquiry etemplate de löscht ALLE ausgewählten eTemplates OHNE weitere Rückfrage
delete column etemplate de Spalte löschen
delete this etemplate etemplate de dieses eTemplate löschen
@ -132,7 +133,8 @@ last etemplate de Letzte
left etemplate de Links
length for char+varchar, precisions int: 2, 4, 8 and float: 4, 8 etemplate de Länge für char+varchar, Genauigkeit für int: 2, 4, 8 und float: 4, 8
link etemplate de Verknüpfung
linklist etemplate de ListeVerknüpfungen
linklist etemplate de VerknüpfungListe
linkstring etemplate de VerküpfungZeichenkette
linkto etemplate de VerküpfungZu
load this template into the editor etemplate de lädt diese Template zum Bearbeiten
minute etemplate de Minute
@ -147,6 +149,7 @@ new search etemplate de Neue Suche
new table created etemplate de Neue Tabelle erzeugt
newer version '%1' exists !!! etemplate de Neuere Version '%1' existiert !!!
nextmatch etemplate de Nextmatch
no file etemplate de keine Datei
no filename given or selected via browse... etemplate de kein Dateiname angegeben oder mit [Browse...] ausgewählt
nothing found - try again !!! etemplate de Nichts gefunden - nochmal versuchen !!!
nullable etemplate de Nullable
@ -165,6 +168,8 @@ primary key etemplate de Primary Key
primary key for the table, gets automaticaly indexed etemplate de Hauptindex (Primary Key) der Tabelle, wird automatisch indiziert
radiobutton etemplate de Radioknopf
read etemplate de Lesen
read a list of entries. etemplate de Liest eine Liste von Einträgen.
read a single entry by passing the id and fieldlist. etemplate de Liste einen einzelnen Eintrag durch übergabe seiner Id und Feldliste.
read etemplate from database (for the keys above) etemplate de ließt ein eTemplate aus der Datenbank (für die Schlüssel darüber)
remove row (can not be undone!!!) etemplate de löscht eine Zeile (NICHT rückgängig zu machen)
remove this link (not the entry itself) etemplate de entfernt diese Verknüpfung (nicht den Eintrag selbst)
@ -231,6 +236,7 @@ type of the column etemplate de Typ der Spalte
type of the field (select label if field should be empty) etemplate de Type des Feldes (Beschriftung auswählen wenn Feld leer sein soll)
unique etemplate de Unique
unlink etemplate de Lösen
update a single entry by passing the fields. etemplate de Aktualisert einen einzelnen Eintrag über seine Felder.
update from version '%1' to etemplate de Update von Version '%1' auf
upload etemplate de Hochladen
value etemplate de Wert

View File

@ -1,6 +1,6 @@
%1 disabled etemplate en %1 disabled
%1 etemplates deleted etemplate en %1 eTemplates deleted
%1 etemplates found etemplate en %1 eTemplates found
%1 disabled etemplate en %1 disabled
%1 needed etemplate en %1 needed
%1 notranslation etemplate en %1 NoTranslation
%1 onchange etemplate en %1 onChange
@ -134,6 +134,7 @@ left etemplate en Left
length for char+varchar, precisions int: 2, 4, 8 and float: 4, 8 etemplate en length for char+varchar, precisions int: 2, 4, 8 and float: 4, 8
link etemplate en Link
linklist etemplate en LinkList
linkstring etemplate en LinkString
linkto etemplate en LinkTo
load this template into the editor etemplate en load this template into the editor
minute etemplate en Minute