Re: PHP convert to Smarty
...continued from post #1
Below are the two pages I created but they do not work. I took section 1 (from code in post #1) and created the ff.php page. I then created ff.tpl page by adding the section 2 and section 3 code. In order for the section two code to be added to the head tag, I had to use the built-in Smarty {capture} function which works. I also had to change all of the PHP opening and closing tags to {php} and {/php}.
ff.tpl:
Code:
{capture name="header"}
{php} /* BEGIN - SECTION 2 */ {/php}
{php} require_once(FF_SRC . "/FfIncludes.php"); {/php}
{php} if ($GLOBALS["action"] == FF_DONE) { {/php}
<meta http-equiv="Refresh" content="{php} echo FF_SLEEP {/php}; url={php} echo $GLOBALS["FF_DONE_URL"] {/php}">
{php} } {/php}
<style type="text/css">
{literal}
/* Sometimes it is useful to specify a label width */
/*label.notValid, label.isValid, label.disabled, label.display {
width: 150px;
}*/
{/literal}
</style>
{php} /* END - SECTION 2 */ {/php}
{/capture}
{include file='header.tpl'}
{php} /* BEGIN - SECTION 3 */ {/php}
<div class="ffForm">
<a name="ffStart"></a>
{php}
// For debugging:
// print_r($_REQUEST);
// echo $ffForm->__toString();
{/php}
<form name="contact_us" action="#ffStart" method="post" enctype="multipart/form-data">
{php} echo FfMenuHelper::getSectionTitleHeader(FF_FORM_TITLE) {/php}
{php} if ($GLOBALS["action"] == FF_DONE) { {/php}
<br />
<div class="ffConfirmation">
{php} echo FfLH::t("Thank you for your submission.") {/php}
</div>
<div class="ffRedirectNote">
<a href="{php} echo $GLOBALS["FF_DONE_URL"] {/php}">{php} echo (FfLH::t("Please click here if your browser does not redirect in") . " " . FF_SLEEP . " " . FfLH::t("seconds") . ".") {/php}</a>
</div>
<br />
{php} } else {
if ($GLOBALS["action"] == FF_CONFIRM) {
{/php}
<h3 class="FORMfields">
{php} echo FfLH::t("Please confirm that the following data is correct:") {/php}
</h3>
{php}
} else {
{/php}
<div style="text-align:right;margin-bottom:10px;">
<span class="required">*</span><span class="help" style="padding-left:0px;font-size:9px;"> - {php} echo FfLH::t("required") {/php}</span>
</div>
{php}
}
echo $ffForm->getTableTag();
} {/php}
{php} echo FfMenuHelper::getSectionTitleFooter() {/php}
<div style="text-align:right;">
<a href="{php} echo FF_ROOT_URL {/php}" target="_blank"><img class="ffTinyLogo" alt="FORMfields, The Premiere Web Framework." src="http://www.mysite.com/FORMfields/images/blank.gif"/></a><a style="font: normal normal normal 9px verdana,sans-serif;" href="http://www.formfields.com" target="_blank">Form Generated by FORMgen</a>
</div>
{php} if (FF_SHOW_W3C_VALIDATOR) { {/php}
<div>
<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a>
<a href="http://jigsaw.w3.org/css-validator/check/referer"><img style="border:0;width:88px;height:31px" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" /></a>
</div>
{php} } {/php}
</form>
</div>
{php} /* END - SECTION 3 */ {/php}
{include file='footer.tpl'}
ff.php:
Code:
<?php
/* $Id: help_contact.php 42 2009-01-29 04:55:14Z john $ */
$page = "ff";
include "header.php";
//if(isset($_POST['task'])) { $task = $_POST['task']; } elseif(isset($_GET['task'])) { $task = $_GET['task']; } else { $task = "main"; }
// SET DEFAULTS
//$result = 0;
//$is_error = 0;
// SET DEFAULT NAME & EMAIL IF NOT SUBMITTED
if(!isset($_POST['contact_email'])) { $contact_email = $user->user_info['user_email']; } else { $contact_email = $_POST['contact_email']; }
if(!isset($_POST['contact_name'])) { $contact_name = $user->user_info['user_displayname']; } else { $contact_name = $_POST['contact_name']; }
if(!isset($_POST['contact_subject'])) { $contact_subject = 'New product/improvement ideas'; } else { $contact_subject = $_POST['contact_subject']; }
/* BEGIN - SECTION 1 */
//require_once(dirname(__FILE__) . "/../../FORMfields.php");
require_once($_SERVER["DOCUMENT_ROOT"] . "/FORMfields/FORMfields.php"); // Absolute path
//$GLOBALS["FF_GLOBALS_VERBOSE"] = true; // For debugging purposes
//$GLOBALS["FF_GLOBALS_SEND_EMAILS"] = false; // For debugging purposes
// ---------- FORM PROPERTIES - START ----------
// NOTE: Only changes made to the form properties and structure
// (not actions) of the form can be reloaded into FORMgen.
define("FF_SLEEP", 4);
define("FF_FORM_NAME", "contact_us");
define("FF_FORM_TITLE", htmlspecialchars("Contact Us"));
define("FF_STYLE_FILE", FF_ROOT_URL . "/styles/defaultRightLabels.css");
define("FF_SHOW_W3C_VALIDATOR", false);
define("FF_DISPLAY_CONFIRMATION", true); // Note: Static form layout is not compatible with the confirmation screen.
define("FF_DISPLAY_THANK_YOU_PAGE", true);
define("FF_INSERT_INTO_DB", true);
define("FF_SEND_FORM_EMAIL1", true);
define("FF_FORM_EMAIL1_TO", "[email protected]");
define("FF_FORM_EMAIL1_TO_FIELDS", "");
define("FF_FORM_EMAIL1_FROM", ""); // Note: You cannot specify a FF_FORM_EMAIL1_FROM and FF_FORM_EMAIL1_FROM_FIELD!
define("FF_FORM_EMAIL1_FROM_FIELD", "email");
define("FF_FORM_EMAIL1_SUBJECT", "Contact Us Submission");
define("FF_FORM_EMAIL1_MESSAGE_HEADER", "");
define("FF_FORM_EMAIL1_MESSAGE_FOOTER", "");
define("FF_FORM_EMAIL1_USE_HTML", true);
define("FF_FORM_EMAIL1_SEND_FORM_DATA", true);
define("FF_SEND_FORM_EMAIL2", false);
define("FF_FORM_EMAIL2_TO", "");
define("FF_FORM_EMAIL2_TO_FIELDS", "");
define("FF_FORM_EMAIL2_FROM", ""); // Note: You cannot specify both a FF_FORM_EMAIL2_FROM and FF_FORM_EMAIL2_FROM_FIELD!
define("FF_FORM_EMAIL2_FROM_FIELD", "");
define("FF_FORM_EMAIL2_SUBJECT", "Contact Us Submission");
define("FF_FORM_EMAIL2_MESSAGE_HEADER", "");
define("FF_FORM_EMAIL2_MESSAGE_FOOTER", "");
define("FF_FORM_EMAIL2_USE_HTML", true);
define("FF_FORM_EMAIL2_SEND_FORM_DATA", true);
$GLOBALS["FF_CANCEL_URL"] = "http://www.mysite.com";
$GLOBALS["FF_DONE_URL"] = "http://www.mysite.com";
$GLOBALS["FF_DEFAULTS"] = array(
"name" => "{\$user->user_info.user_displayname}",
"email" => "{\$user->user_info.user_email}"
);
// ---------- FORM PROPERTIES - END ----------
// ---------- FORM STRUCTURE - START ----------
$ffForm = new FfForm();
$ffForm->addField(new SessionVerificationField());
$ffForm->addField(new TimestampField("Timestamp"));
$ffForm->addField(new IpAddressField("IP Address"));
$ffForm->addField(new PersonNameField("name", "Name", FORM_FIELD_REQUIRED));
$ffForm->addField(new EmailAddrField("email", "Email Address", FORM_FIELD_REQUIRED));
$ffForm->addField(new TextField("subject", "Subject", FORM_FIELD_REQUIRED, 200, 1, 63));
$ffForm->addField(new TextAreaField("message", "Message", FORM_FIELD_REQUIRED, 1000, 1, 10, 60));
$ffForm->addField(new ImageVerificationField("Image Verification"));
$ffForm->addField(new SubmitField("ff_submit", "Submit"));
$ffForm->addField(new SubmitField("ff_clear", "Clear"));
$ffForm->addField(new SubmitField("ff_cancel", "Cancel"));
// ---------- FORM STRUCTURE - END ----------
// ---------- FORM ACTIONS - START ----------
class SubmitButtonListener extends FfButtonListener
{
function onClick(&$ffForm)
{
if ($ffForm->checkValues()) {
// CONFIRMATION OPERATION:
$ffForm->setEditable(false);
$ffForm->setEditableFields(array("ff_back", "ff_confirm"), true);
$ffForm->setHiddenFields(array("ff_back", "ff_confirm"), false);
$GLOBALS["action"] = FF_CONFIRM;
}
}
}
class ConfirmButtonListener extends FfButtonListener
{
function onClick(&$ffForm)
{
//echo "CONFIRM<hr/>";
if ($ffForm->checkValues()) {
// SUBMIT OPERATION:
$GLOBALS["action"] = FF_DONE;
// Send an email?
if (FF_SEND_FORM_EMAIL1)
{
$formEmail1To = FF_FORM_EMAIL1_TO;
// Add the to addresses which were entered by the user
$formEmail1ToFields = split(",", FF_FORM_EMAIL1_TO_FIELDS);
foreach($formEmail1ToFields as $fieldName) {
if (!empty($fieldName))
$formEmail1To .= "," . $ffForm->getValue($fieldName);
}
// Was the address specified or are we loading from a field name?
$formEmail1From = FF_FORM_EMAIL1_FROM;
if (!FormField::isBlank(FF_FORM_EMAIL1_FROM_FIELD)) {
$formEmail1From = $ffForm->getValue(FF_FORM_EMAIL1_FROM_FIELD);
}
$formEmail1Cc = null;
$formEmail1Bcc = null;
$formEmail1Subject = FF_FORM_EMAIL1_SUBJECT;
$formEmail1MsgHeader = FF_FORM_EMAIL1_MESSAGE_HEADER; // The text that preceeds the field values
$formEmail1MsgFooter = FF_FORM_EMAIL1_MESSAGE_FOOTER; // The text that follows the field values
$formEmail1CssFile = null; // If you don't like the defaulted CSS styles, you can include another style sheet.
$formEmail1UseHtml = FF_FORM_EMAIL1_USE_HTML; // Use false for text emails
$formEmail1SendFormData = FF_FORM_EMAIL1_SEND_FORM_DATA; // Use false to not send form data
$formEmail1SendFormUploads = true; // Use false to not attach files uploaded from the form
if (!$formEmail1UseHtml) { // Convert the line of text to multiple lines?
$formEmail1MsgHeader = str_replace("<br/>", "\n", $formEmail1MsgHeader);
$formEmail1MsgFooter = str_replace("<br/>", "\n", $formEmail1MsgFooter);
}
// You can include extra attachments by populating an array as follows.
// Note: All UploadFields are automatically attached to the email.
$formEmail1Attachments = null;
//$formEmail1Attachments[0] = array(dirname(__FILE__) . "/../calendar.gif", "calendar.gif");
$ffForm->email($formEmail1To, $formEmail1Subject, $formEmail1From,
$formEmail1Cc, $formEmail1Bcc, $formEmail1MsgHeader,
$formEmail1MsgFooter, $formEmail1Attachments, $formEmail1UseHtml,
$formEmail1CssFile, $formEmail1SendFormData, $formEmail1SendFormUploads);
}
// Send a second email?
if (FF_SEND_FORM_EMAIL2)
{
$formEmail2To = FF_FORM_EMAIL2_TO;
// Add the to addresses which were entered by the user
$formEmail2ToFields = split(",", FF_FORM_EMAIL2_TO_FIELDS);
foreach($formEmail2ToFields as $fieldName) {
if (!empty($fieldName))
$formEmail2To .= "," . $ffForm->getValue($fieldName);
}
$formEmail2From = FF_FORM_EMAIL2_FROM;
if (!FormField::isBlank(FF_FORM_EMAIL2_FROM_FIELD)) {
$formEmail2From = $ffForm->getValue(FF_FORM_EMAIL2_FROM_FIELD);
}
$formEmail2Cc = null;
$formEmail2Bcc = null;
$formEmail2Subject = FF_FORM_EMAIL2_SUBJECT;
$formEmail2MsgHeader = FF_FORM_EMAIL2_MESSAGE_HEADER; // The text that preceeds the field values
$formEmail2MsgFooter = FF_FORM_EMAIL2_MESSAGE_FOOTER; // The text that follows the field values
$formEmail2CssFile = null; // If you don't like the defaulted CSS styles, you can include another style sheet.
$formEmail2UseHtml = FF_FORM_EMAIL2_USE_HTML; // Use false for text emails
$formEmail2SendFormData = FF_FORM_EMAIL2_SEND_FORM_DATA; // Use false to not send form data
$formEmail2SendFormUploads = true; // Use false to not attach files uploaded from the form
if (!$formEmail2UseHtml) { // Convert the line of text to multiple lines?
$formEmail2MsgHeader = str_replace("<br/>", "\n", $formEmail2MsgHeader);
$formEmail2MsgFooter = str_replace("<br/>", "\n", $formEmail2MsgFooter);
}
// You can include extra attachments by populating an array as follows.
// Note: All UploadFields are automatically attached to the email.
$formEmail2Attachments = null;
//$formEmail2Attachments[0] = array(dirname(__FILE__) . "/../calendar.gif", "calendar.gif");
$ffForm->email($formEmail2To, $formEmail2Subject, $formEmail2From,
$formEmail2Cc, $formEmail2Bcc, $formEmail2MsgHeader,
$formEmail2MsgFooter, $formEmail2Attachments, $formEmail2UseHtml,
$formEmail2CssFile, $formEmail2SendFormData, $formEmail2SendFormUploads);
}
if (FF_INSERT_INTO_DB) {
$ffForm->addField(new DateTimeField("ff_inserted_on", "Inserted On", FORM_FIELD_REQUIRED, null));
$ffForm->formFields["ff_inserted_on"]->getCurrentDateTime();
$ffForm->insertValuesIntoDb(FF_FORM_NAME);
}
if (!FF_DISPLAY_THANK_YOU_PAGE) {
header("Location: " . $GLOBALS["FF_DONE_URL"]);
}
}
}
}
if ($ffForm->fieldExists("ff_submit")) {
// Does the submit button submit the data or confirm the data?
if (FF_DISPLAY_CONFIRMATION)
$ffForm->formFields["ff_submit"]->addButtonListener(new SubmitButtonListener());
else
$ffForm->formFields["ff_submit"]->addButtonListener(new ConfirmButtonListener());
}
if ($ffForm->fieldExists("ff_clear")) {
$ffForm->formFields["ff_clear"]->addButtonListener(new FfClearButtonListener());
}
class CancelButtonListener extends FfButtonListener
{
function onClick(&$ffForm)
{
// CANCEL OPERATION:
header("Location: " . $GLOBALS["FF_CANCEL_URL"]);
}
}
if ($ffForm->fieldExists("ff_cancel")) {
$ffForm->formFields["ff_cancel"]->addButtonListener(new CancelButtonListener());
}
$ffForm->addField(new SubmitField("ff_back", "<" . FfLH::t("Back")));
$confirmButton = new SubmitField("ff_confirm", FfLH::t("Confirm") . ">");
$confirmButton->addButtonListener(new ConfirmButtonListener());
$ffForm->addField($confirmButton);
class FormListener extends FfFormListener
{
function onNoClicks(&$ffForm)
{
// DEFAULT OPERATION:
// If necessary, convert the default values to multiple lines
if (sizeof($GLOBALS["FF_DEFAULTS"]) > 0) {
foreach ($GLOBALS["FF_DEFAULTS"] as $i=>$globalValue) {
$GLOBALS["FF_DEFAULTS"][$i] = str_replace("<br/>", "\n", $globalValue);
}
}
$ffForm->loadDbValues($GLOBALS["FF_DEFAULTS"]);
// Enter other default values here. Example:
//$ffForm->setValue("name", "John");
}
}
$ffForm->addFormListener(new FormListener());
define("FF_ENTER", 1);
define("FF_CONFIRM", 2);
define("FF_DONE", 3);
$GLOBALS["action"] = FF_ENTER;
$ffForm->setHiddenFields(array("ff_back", "ff_confirm"), true);
$ffForm->process();
// ---------- FORM ACTIONS - END ----------
/* END - SECTION 1 */
include "footer.php";
?>
When I access ff.php from the web, it partially loads but displays the following PHP error:
Fatal error: Call to a member function getTableTag() on a non-object in C:\www\mysite.com\include\smarty\templates_c\%%01^013^0133830D%%ff.tpl.php on line 61
The error is referring to echo $ffForm->getTableTag();
That's were I'm stuck. According to Smarty guidelines, the template file (ff.tpl) is not supposed to contain any PHP. From what I gather, you are supposed to use only Smarty variables for what is in the PHP file.
I don't know how to remove all of the PHP from the template file, add it to the PHP file (ff.php) and create the Smarty variables that will be used in the template file.
Can someone lend me a hand, please :)
Re: PHP convert to Smarty
Being that this is all tied to Smarty...you should post this in their forums.