mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-04 18:34:27 +02:00
fixed bug with resource testing and include_path
This commit is contained in:
2
NEWS
2
NEWS
@@ -1,3 +1,5 @@
|
|||||||
|
- fixed bug with resource testing, and include_path (Monte)
|
||||||
|
|
||||||
Version 2.1.0
|
Version 2.1.0
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
@@ -804,13 +804,18 @@ function _generate_debug_output() {
|
|||||||
|
|
||||||
if ($resource_type == 'file') {
|
if ($resource_type == 'file') {
|
||||||
$readable = false;
|
$readable = false;
|
||||||
$include_paths = preg_split('![:;]!', ini_get('include_path'));
|
if(@is_file($resource_name)) {
|
||||||
foreach ($include_paths as $path) {
|
$readable = true;
|
||||||
if (@is_file($path . DIRECTORY_SEPARATOR . $resource_name)) {
|
} else {
|
||||||
$readable = true;
|
// test for file in include_path
|
||||||
break;
|
$include_paths = preg_split('![:;]!', ini_get('include_path'));
|
||||||
}
|
foreach ($include_paths as $path) {
|
||||||
}
|
if (@is_file($path . DIRECTORY_SEPARATOR . $resource_name)) {
|
||||||
|
$readable = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if ($resource_type != 'file') {
|
} else if ($resource_type != 'file') {
|
||||||
$readable = true;
|
$readable = true;
|
||||||
$resource_func = $this->_plugins['resource'][$resource_type][0][0];
|
$resource_func = $this->_plugins['resource'][$resource_type][0][0];
|
||||||
|
@@ -1393,6 +1393,120 @@ s m o k e r s a r e p. . .</programlisting>
|
|||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
</html></programlisting>
|
</html></programlisting>
|
||||||
|
</example>
|
||||||
|
</sect1>
|
||||||
|
<sect1 id="language.function.foreach">
|
||||||
|
<title>foreach,foreachelse</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>Attribute Name</entry>
|
||||||
|
<entry>Type</entry>
|
||||||
|
<entry>Required</entry>
|
||||||
|
<entry>Default</entry>
|
||||||
|
<entry>Description</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry>from</entry>
|
||||||
|
<entry>string</entry>
|
||||||
|
<entry>Yes</entry>
|
||||||
|
<entry><emphasis>n/a</emphasis></entry>
|
||||||
|
<entry>The name of the array you are looping through</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>item</entry>
|
||||||
|
<entry>string</entry>
|
||||||
|
<entry>Yes</entry>
|
||||||
|
<entry><emphasis>n/a</emphasis></entry>
|
||||||
|
<entry>The name of the variable that is the current
|
||||||
|
element</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>key</entry>
|
||||||
|
<entry>string</entry>
|
||||||
|
<entry>No</entry>
|
||||||
|
<entry><emphasis>n/a</emphasis></entry>
|
||||||
|
<entry>The name of the variable that is the current key</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>name</entry>
|
||||||
|
<entry>string</entry>
|
||||||
|
<entry>No</entry>
|
||||||
|
<entry><emphasis>n/a</emphasis></entry>
|
||||||
|
<entry>The name of the foreach loop for accessing
|
||||||
|
foreach properties</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
<para>
|
||||||
|
<emphasis>foreach</emphasis> loops are an alternative to
|
||||||
|
<emphasis>section</emphasis> loops. <emphasis>foreach</emphasis> is
|
||||||
|
used to loop over a single associative array. The syntax for
|
||||||
|
<emphasis>foreach</emphasis> is much easier than
|
||||||
|
<emphasis>section</emphasis>, but as a tradeoff it can only be used
|
||||||
|
for a single array. <emphasis>foreach</emphasis> tags must be
|
||||||
|
paired with <emphasis>/foreach</emphasis> tags. Required parameters
|
||||||
|
are <emphasis>from</emphasis> and <emphasis>item</emphasis>. The
|
||||||
|
name of the foreach loop can be anything you like, made up of
|
||||||
|
letters, numbers and underscores. <emphasis>foreach</emphasis>
|
||||||
|
loops can be nested, and the nested foreach names must be unique
|
||||||
|
from each other. The <emphasis>from</emphasis> variable (usually an
|
||||||
|
array of values) determines the number of times
|
||||||
|
<emphasis>foreach</emphasis> will loop.
|
||||||
|
<emphasis>foreachelse</emphasis> is executed when there are no
|
||||||
|
values in the <emphasis>from</emphasis> variable.
|
||||||
|
</para>
|
||||||
|
<example>
|
||||||
|
<title>foreach</title>
|
||||||
|
<programlisting>
|
||||||
|
|
||||||
|
{* this example will print out all the values of the $custid array *}
|
||||||
|
{foreach from=$custid item=curr_id}
|
||||||
|
id: {$curr_id}<br>
|
||||||
|
{/foreach}
|
||||||
|
|
||||||
|
OUTPUT:
|
||||||
|
|
||||||
|
id: 1000<br>
|
||||||
|
id: 1001<br>
|
||||||
|
id: 1002<br></programlisting>
|
||||||
|
</example>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title>foreach key</title>
|
||||||
|
<programlisting>
|
||||||
|
{* The key contains the key for each looped value
|
||||||
|
|
||||||
|
assignment looks like this:
|
||||||
|
|
||||||
|
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
|
||||||
|
array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
|
||||||
|
|
||||||
|
*}
|
||||||
|
|
||||||
|
{foreach name=outer item=contact from=$contacts}
|
||||||
|
{foreach key=key item=item from=$contact}
|
||||||
|
{$key}: {$item}<br>
|
||||||
|
{/foreach}
|
||||||
|
{/foreach}
|
||||||
|
|
||||||
|
OUTPUT:
|
||||||
|
|
||||||
|
phone: 1<br>
|
||||||
|
fax: 2<br>
|
||||||
|
cell: 3<br>
|
||||||
|
phone: 555-4444<br>
|
||||||
|
fax: 555-3333<br>
|
||||||
|
cell: 760-1234<br></programlisting>
|
||||||
</example>
|
</example>
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="language.function.include">
|
<sect1 id="language.function.include">
|
||||||
@@ -2407,120 +2521,6 @@ e-mail: jane@mydomain.com<p></programlisting>
|
|||||||
</example>
|
</example>
|
||||||
</sect2>
|
</sect2>
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="language.function.foreach">
|
|
||||||
<title>foreach,foreachelse</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>Attribute Name</entry>
|
|
||||||
<entry>Type</entry>
|
|
||||||
<entry>Required</entry>
|
|
||||||
<entry>Default</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<row>
|
|
||||||
<entry>from</entry>
|
|
||||||
<entry>string</entry>
|
|
||||||
<entry>Yes</entry>
|
|
||||||
<entry><emphasis>n/a</emphasis></entry>
|
|
||||||
<entry>The name of the array you are looping through</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>item</entry>
|
|
||||||
<entry>string</entry>
|
|
||||||
<entry>Yes</entry>
|
|
||||||
<entry><emphasis>n/a</emphasis></entry>
|
|
||||||
<entry>The name of the variable that is the current
|
|
||||||
element</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>key</entry>
|
|
||||||
<entry>string</entry>
|
|
||||||
<entry>No</entry>
|
|
||||||
<entry><emphasis>n/a</emphasis></entry>
|
|
||||||
<entry>The name of the variable that is the current key</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>name</entry>
|
|
||||||
<entry>string</entry>
|
|
||||||
<entry>No</entry>
|
|
||||||
<entry><emphasis>n/a</emphasis></entry>
|
|
||||||
<entry>The name of the foreach loop for accessing
|
|
||||||
foreach properties</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</informaltable>
|
|
||||||
<para>
|
|
||||||
<emphasis>foreach</emphasis> loops are an alternative to
|
|
||||||
<emphasis>section</emphasis> loops. <emphasis>foreach</emphasis> is
|
|
||||||
used to loop over a single associative array. The syntax for
|
|
||||||
<emphasis>foreach</emphasis> is much easier than
|
|
||||||
<emphasis>section</emphasis>, but as a tradeoff it can only be used
|
|
||||||
for a single array. <emphasis>foreach</emphasis> tags must be
|
|
||||||
paired with <emphasis>/foreach</emphasis> tags. Required parameters
|
|
||||||
are <emphasis>from</emphasis> and <emphasis>item</emphasis>. The
|
|
||||||
name of the foreach loop can be anything you like, made up of
|
|
||||||
letters, numbers and underscores. <emphasis>foreach</emphasis>
|
|
||||||
loops can be nested, and the nested foreach names must be unique
|
|
||||||
from each other. The <emphasis>from</emphasis> variable (usually an
|
|
||||||
array of values) determines the number of times
|
|
||||||
<emphasis>foreach</emphasis> will loop.
|
|
||||||
<emphasis>foreachelse</emphasis> is executed when there are no
|
|
||||||
values in the <emphasis>from</emphasis> variable.
|
|
||||||
</para>
|
|
||||||
<example>
|
|
||||||
<title>foreach</title>
|
|
||||||
<programlisting>
|
|
||||||
|
|
||||||
{* this example will print out all the values of the $custid array *}
|
|
||||||
{foreach from=$custid item=curr_id}
|
|
||||||
id: {$curr_id}<br>
|
|
||||||
{/foreach}
|
|
||||||
|
|
||||||
OUTPUT:
|
|
||||||
|
|
||||||
id: 1000<br>
|
|
||||||
id: 1001<br>
|
|
||||||
id: 1002<br></programlisting>
|
|
||||||
</example>
|
|
||||||
|
|
||||||
<example>
|
|
||||||
<title>foreach key</title>
|
|
||||||
<programlisting>
|
|
||||||
{* The key contains the key for each looped value
|
|
||||||
|
|
||||||
assignment looks like this:
|
|
||||||
|
|
||||||
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
|
|
||||||
array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
|
|
||||||
|
|
||||||
*}
|
|
||||||
|
|
||||||
{foreach name=outer item=contact from=$contacts}
|
|
||||||
{foreach key=key item=item from=$contact}
|
|
||||||
{$key}: {$item}<br>
|
|
||||||
{/foreach}
|
|
||||||
{/foreach}
|
|
||||||
|
|
||||||
OUTPUT:
|
|
||||||
|
|
||||||
phone: 1<br>
|
|
||||||
fax: 2<br>
|
|
||||||
cell: 3<br>
|
|
||||||
phone: 555-4444<br>
|
|
||||||
fax: 555-3333<br>
|
|
||||||
cell: 760-1234<br></programlisting>
|
|
||||||
</example>
|
|
||||||
</sect1>
|
|
||||||
<sect1 id="language.function.strip">
|
<sect1 id="language.function.strip">
|
||||||
<title>strip</title>
|
<title>strip</title>
|
||||||
<para>
|
<para>
|
||||||
|
@@ -804,13 +804,18 @@ function _generate_debug_output() {
|
|||||||
|
|
||||||
if ($resource_type == 'file') {
|
if ($resource_type == 'file') {
|
||||||
$readable = false;
|
$readable = false;
|
||||||
$include_paths = preg_split('![:;]!', ini_get('include_path'));
|
if(@is_file($resource_name)) {
|
||||||
foreach ($include_paths as $path) {
|
$readable = true;
|
||||||
if (@is_file($path . DIRECTORY_SEPARATOR . $resource_name)) {
|
} else {
|
||||||
$readable = true;
|
// test for file in include_path
|
||||||
break;
|
$include_paths = preg_split('![:;]!', ini_get('include_path'));
|
||||||
}
|
foreach ($include_paths as $path) {
|
||||||
}
|
if (@is_file($path . DIRECTORY_SEPARATOR . $resource_name)) {
|
||||||
|
$readable = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if ($resource_type != 'file') {
|
} else if ($resource_type != 'file') {
|
||||||
$readable = true;
|
$readable = true;
|
||||||
$resource_func = $this->_plugins['resource'][$resource_type][0][0];
|
$resource_func = $this->_plugins['resource'][$resource_type][0][0];
|
||||||
|
Reference in New Issue
Block a user