Re: [SMARTY] Plugin problem
| From: | Erich C. Beyrent | Date: | Fri, 03 Nov 2006 15:48:05 +0000 |
| Subject: | Re: [SMARTY] Plugin problem | ||
| References: | 1 2 3 4 5 6 | Groups: | php.smarty.general |
| Request: | Send a blank email to php-smarty-general+get-13545@lists.php.net to get a copy of this message | ||
Before I get into specifics, I should point out that I tested this problem using the standard html_select_date plugin, and saw the exact same behavior, so I don't think the problem is my plugin itself. I believe there is some kind of issue with my environment.
I have a single plugin directory, which is the main {smarty_dir}/libs/plugins directory.
The name of the plugin file is function.html_select_date2.php, which is based upon the original html_select_date function. My modded file allows me to override the names of the fields like this:
{html_select_date2 field_name="FromMonth,FromDay,FromYear" day_extra="id=FromDay class=dateSelect" month_extra="id=FromMonth class=dateSelect" year_extra="id=FromYear class=dateSelect" end_year="+2"}
The contents are as follows (this is gonna be long...):
function smarty_function_html_select_date2($params, &$smarty)
{
require_once $smarty->_get_plugin_filepath('shared','make_timestamp');
require_once $smarty->_get_plugin_filepath('function','html_options');
/* Default values. */
$prefix = "Date_";
$start_year = strftime("%Y");
$end_year = $start_year;
$display_days = true;
$display_months = true;
$display_years = true;
$month_format = "%B";/* Write months as numbers by default GL */ $month_value_format = "%m";
$day_format = "%02d";/* Write day values using this format MB */ $day_value_format = "%d";
$year_as_text = false;/* Display years in reverse order? Ie. 2000,1999,.... */ $reverse_years = false; /* Should the select boxes be part of an array when returned from PHP?
e.g. setting it to "birthday", would create "birthday[Day]",
"birthday[Month]" & "birthday[Year]". Can be combined with prefix */
$field_array = null;
/* <select size>'s of the different <select> tags.
If not set, uses default dropdown. */ $day_size = null; $month_size = null; $year_size = null;/* Unparsed attributes common to *ALL* the <select>/<input> tags.
An example might be in the template: all_extra ='class ="foo"'. */ $all_extra = null;/* Separate attributes for the tags. */
$day_extra = null; $month_extra = null; $year_extra = null;/* Field name (if provided, replaces 'Day','Month', or 'Year') */
$field_name = null;/* Order in which to display the fields.
"D" -> day, "M" -> month, "Y" -> year. */ $field_order = 'MDY';/* String printed between the different fields. */ $field_separator = "\n"; $time = time();
$all_empty = null; $day_empty = null; $month_empty = null; $year_empty = null;foreach ($params as $_key=>$_value) {
switch ($_key) {
case 'prefix':
case 'time':
case 'start_year':
case 'end_year':
$$_key = (string)$_value;
break;
case 'month_format':
case 'day_format':
case 'day_value_format':
case 'field_array':
case 'day_size':
case 'month_size':
case 'year_size':
case 'all_extra':
case 'day_extra':
$$_key = (string)$_value;
break;
case 'month_extra':
$$_key = (string)$_value;
break;
case 'year_extra':
$$_key = (string)$_value;
break;
case 'field_name':
$arrFields = explode(',', $_value);
if($strMonthFieldName == '')
{
$strMonthFieldName = $arrFields[0];
}
if($strDayFieldName == '')
{
$strDayFieldName = $arrFields[1];
}
if($strYearFieldName == '')
{
$strYearFieldName = $arrFields[2];
}
break;
case 'field_order':
case 'field_separator':
case 'month_value_format':
case 'month_empty':
case 'day_empty':
case 'year_empty':
$$_key = (string)$_value;
break;
case 'all_empty':
$$_key = (string)$_value;
$day_empty = $month_empty = $year_empty = $all_empty;
break;
case 'display_days':
case 'display_months':
case 'display_years':
case 'year_as_text':
case 'reverse_years':
$$_key = (bool)$_value;
break;
default:
$smarty->trigger_error("[html_select_date] unknown parameter $_key", E_USER_WARNING);
}} if(preg_match('!^-\d+$!',$time)) {
// negative timestamp, use date()
$time = date('Y-m-d',$time);
}
// If $time is not in format yyyy-mm-dd
if (!preg_match('/^\d{0,4}-\d{0,2}-\d{0,2}$/', $time)) {
// use smarty_make_timestamp to get an unix timestamp and
// strftime to make yyyy-mm-dd
$time = strftime('%Y-%m-%d', smarty_make_timestamp($time));
}
// Now split this in pieces, which later can be used to set the select
$time = explode("-", $time);
// make syntax "+N" or "-N" work with start_year and end_year
if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) {
if ($match[1] == '+') {
$end_year = strftime('%Y') + $match[2];
} else {
$end_year = strftime('%Y') - $match[2];
}
}
if (preg_match('!^(\+|\-)\s*(\d+)$!', $start_year, $match)) {
if ($match[1] == '+') {
$start_year = strftime('%Y') + $match[2];
} else {
$start_year = strftime('%Y') - $match[2];
}
}
if (strlen($time[0]) > 0) {
if ($start_year > $time[0] && !isset($params['start_year'])) {
// force start year to include given date if not explicitly set
$start_year = $time[0];
}
if($end_year < $time[0] && !isset($params['end_year'])) {
// force end year to include given date if not explicitly set
$end_year = $time[0];
}
}
$field_order = strtoupper($field_order);
$html_result = $month_result = $day_result = $year_result = "";
if ($display_months)
{
$month_names = array();
$month_values = array();
if(isset($month_empty))
{
$month_names[''] = $month_empty;
$month_values[''] = '';
}
for ($i = 1; $i <= 12; $i++)
{
$month_names[$i] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000));
$month_values[$i] = strftime($month_value_format, mktime(0, 0, 0, $i, 1, 2000));
}
$month_result .= '<select name=';
if (null !== $field_array)
{
$month_result .= '"' . $field_array . '[';
$month_result .= (null !== $strMonthFieldName) ? $strMonthFieldName.']"' : $prefix.'Month]"';
$month_result .= ' id="'.$field_array . '[';
$month_result .= (null !== $strMonthFieldName) ? $strMonthFieldName.']"' : $prefix.'Month]"';
}
else
{
$month_result .= (null !== $strMonthFieldName) ? '"'.$strMonthFieldName.'"' : '"'.$prefix.'Month"';
//$month_result .= ' id="'.$strMonthFieldName.'"';
}
if (null !== $month_size)
{
$month_result .= ' size="' . $month_size . '"';
}
if (null !== $month_extra)
{
$month_result .= ' ' . $month_extra;
}
if (null !== $all_extra)
{
$month_result .= ' ' . $all_extra;
}
$month_result .= '>'."\n";
$month_result .= smarty_function_html_options(array('output' => $month_names,
'values' => $month_values,
'selected' => $a=$time[1] ? strftime($month_value_format, mktime(0, 0, 0, (int)$time[1], 1, 2000)) : '',
'print_result' => false),
$smarty);
$month_result .= '</select>';
}
if ($display_days)
{
$days = array();
if (isset($day_empty))
{
$days[''] = $day_empty;
$day_values[''] = '';
}
for ($i = 1; $i <= 31; $i++)
{
$days[] = sprintf($day_format, $i);
$day_values[] = sprintf($day_value_format, $i);
}
$day_result .= '<select name=';
if (null !== $field_array)
{
$day_result .= '"' . $field_array . '[';
$day_result .= (null !== $strDayFieldName) ? $strDayFieldName.']"' : $prefix.'Day]"';
}
else
{
$day_result .= (null !== $strDayFieldName) ? '"'.$strDayFieldName.'"' : '"'.$prefix.'Day"';
}
if (null !== $day_size)
{
$day_result .= ' size="' . $day_size . '"';
}
if (null !== $all_extra)
{
$day_result .= ' ' . $all_extra;
}
if (null !== $day_extra)
{
$day_result .= ' ' . $day_extra;
}
$day_result .= '>'."\n";
$day_result .= smarty_function_html_options(array('output' => $days,
'values' => $day_values,
'selected' => $time[2],
'print_result' => false),
$smarty);
$day_result .= '</select>';
}
if ($display_years)
{
if (null !== $field_array)
{
$year_name = $field_array . '[';
$year_name .= (null !== $strYearFieldName) ? $strYearFieldName.']' : $prefix.'Year]';
}
else
{
$year_name .= (null !== $strYearFieldName) ? $strYearFieldName : $prefix.'Year';
} if ($year_as_text)
{
$year_result .= '<input type="text" name="' . $year_name . '" value="' . $time[0] . '" size="4" maxlength="4"';
if (null !== $all_extra){
$year_result .= ' ' . $all_extra;
}
if (null !== $year_extra){
$year_result .= ' ' . $year_extra;
}
$year_result .= '>';
} else {
$years = range((int)$start_year, (int)$end_year);
if ($reverse_years) {
rsort($years, SORT_NUMERIC);
} else {
sort($years, SORT_NUMERIC);
}
$yearvals = $years;
if(isset($year_empty)) {
array_unshift($years, $year_empty);
array_unshift($yearvals, '');
}
$year_result .= '<select name="' . $year_name . '"';
if (null !== $year_size){
$year_result .= ' size="' . $year_size . '"';
}
if (null !== $all_extra){
$year_result .= ' ' . $all_extra;
}
if (null !== $year_extra){
$year_result .= ' ' . $year_extra;
}
$year_result .= '>'."\n";
$year_result .= smarty_function_html_options(array('output' => $years,
'values' => $yearvals,
'selected' => $time[0],
'print_result' => false),
$smarty);
$year_result .= '</select>';
}
}
// Loop thru the field_order field
for ($i = 0; $i <= 2; $i++){
$c = substr($field_order, $i, 1);
switch ($c){
case 'D':
$html_result .= $day_result;
break;
case 'M':
$html_result .= $month_result;
break;
case 'Y':
$html_result .= $year_result;
break;
}
// Add the field seperator
if($i != 2) {
$html_result .= $field_separator;
}
}
return $html_result;
}
/* vim: set expandtab: */
?>
Monte Ohrt wrote:
What is the name of the plugin file, and what is the content? Do you have one plugin directory, or multiple? Erich C. Beyrent wrote:That's how it appears to me, but I'm not sure why that is happening, or how to fix it. -Erich- Dean Ariel wrote:Erich C. Beyrent wrote:Maybe it's not including the plugins when it's compiled ?? Dean On 11/3/06, Erich C. Beyrent <erich.beyrent@beyrent.net> wrote:Jochem Maas wrote:the function is not being loaded. what I do is stick all my custom smarty plugins in a directory and then add that directory to thegiving meI have written a plugin called html_select_date2, and it iscalled andsome trouble. The first time the page loads, the function isget this:everything works smashingly. However, if I refresh the page, I*/public_html/php/templates_c/%%24^24D^24D5865F%%default.form.tpl.php** Fatal error*: Call to undefined function: smarty_function_html_select_date2() inon line *97 *Is this a permissions problem, or is something else going on here?plugin dirs - that way Smarty will always be able to find/loadlist ofyour pluginsLOL In the Why Use Smarty page, it says: "Adding custom features to Smarty is as easy as dropping them in the plugin directory and mentioning them in the template." So that's exactly what I did. What I don't understand is why the plugin works fine the first time the page loads, but fails when you refresh the browser. Why does it get loaded the first time, but not from the compiled template? -Erich- -- Smarty General Mailing List (http://smarty.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php