You are viewing revision #10 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.
Hi Friends,
In this tutorial, how to manage email Template content on Yii Back-end?
Manage the content from Back-end
view the content front-side
1) create the table like
CREATE TABLE `emil_template` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(55) NOT NULL,
`variables` VARCHAR(255) NOT NULL,
`subject` VARCHAR(255) NOT NULL,
`description` TEXT NOT NULL,
`status` ENUM('1','0') NOT NULL DEFAULT '1' COMMENT '0=inactive,1=active',
PRIMARY KEY (`id`),
INDEX `id` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=1;
2) Make prdefind entry in database,so Admin will edit the partucular content for specific template
3) create the common template in the common layout of the view
<table class="templete_m" style="width: 567px; font-family: Arial,Helvetica;line-height: normal;" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<table style="width: 100%;">
<tbody>
<tr class="t_top">
<td align="left"><img src="<?php echo Yii::app()->getBaseUrl(true) . "/images/logo-admin.png" ?>" alt="" /></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td align="center">
<table style="width: 567px; background:#f5f5f5" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="padding: 20px 20px; font-family: Arial, Helvetica; color: #666666; font-size: 12px;" colspan="2">
<table style="width: 100%;" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td colspan="2" style="color: #666666; font-size: 12px;" align="left"><strong>Dear <?php echo $firstname; ?></strong>,</td>
</tr>
<tr>
<td colspan="2" height="15"></td>
</tr>
<tr>
<td colspan="2" style="color: #666666; font-size: 12px;"><!-- <p>Here is your invoice for ##current_invoice_date##. You can pay your invoice by logging in to your LocalSnag Account Click <a href="login">here</a> to log in.</p> -->
<?php echo $content; ?>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td colspan="2" style="padding: 0px 20px; font-family: Arial, Helvetica; color: #666666; font-size: 16px;">
<table style="width: 100%;">
<tbody>
<tr>
<td style="color: #691712;"><strong>Thanks</strong></td>
</tr>
<tr>
<td style="color: #691712;"><strong><?php echo SystemConfig::getValue('site_name') . ' Team'; ?></strong></td>
</tr>
<tr>
<td style="color: #59acff;"></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr><br />
<tr class="t_footr">
<td align="center">
<table style="width: 567px;">
<tbody>
<tr>
<td align="center">Need Help? Have Feedback? Feel free to <a href="contact" style="color: #59acff;"><strong><?php echo 'Contact ' . SystemConfig::getValue('site_name'); ?></strong></a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
4) Below code in write controller when your tempalete is called
public function actionRegister()
{
//$this->layout = 'inner';
$model = new VkUsers('register');
if(isset($_POST['VkUsers']) && !empty($_POST['VkUsers'])){
//p($_POST);
$pwd = $_POST['VkUsers']['password'];
$_POST['VkUsers']['password'] = md5($_POST['VkUsers']['password']);
$model->setAttributes($_POST['VkUsers']);
$model->dob = $_POST['VkUsers']['year'] .'-'.$_POST['VkUsers']['month'].'-'.$_POST['VkUsers']['day'];
$model->facebook_verified='0';
if ($model->validate()) {
if ($model->save(false)) {
$findTemplateModel = UtilityHtml::FindEMailTempalte('User Registration Notification');//get a template name using email_template table
$description = $findTemplateModel->description;//get the template content with varibles
$subject = $findTemplateModel->subject;
$variables=array(
'{fname}'=>$_POST['VkUsers']['fname'],
'{lname}'=>$_POST['VkUsers']['lname'],
'{email}'=>$_POST['VkUsers']['email'],
'{dob}'=>$model->dob,
'{password}'=>$pwd,
);
$final_array = $this->EmailSendArray($description, $variables);//replace varibles
$send_mail_data = array(
'firstname' => ucwords($_POST['VkUsers']['fname']),
'content'=>$final_array,
);
$message = $this->renderPartial('/index/_template',$send_mail_data,true);//call a template view
$result = $this->actionMailSend($_POST['VkUsers']['email'],$addbcc="", $_POST['VkUsers']['fname'], $subject, $message);//send mail
if($result == 1){
Yii::app()->user->setFlash('success',"Thanks for Register,Your Request send a successful.");
$this->redirect('register');
}
}
}
}
$this->render('user_register',array('model'=>$model));
}
public function EmailSendArray($message,$variables){
$searchArray=array_keys($variables);
$replaceArray=array_values($variables);
return str_replace($searchArray,$replaceArray,$message);
}
Public static function FindEMailTempalte($name){
return $findTemplateModel = EmailTemplate::model()->find("name='".$name."' AND status='1'");
}
Explication for down votes?
I see that you have some down votes, but no explication.
I think that proposing a method for email templates is a nice idea, but the implementation here is not a good example.
Here are some comments to improve it:
For example something like:
// Schema for table 'authassignment' (RBAM) $this->createTable('AuthAssignment', array( "itemname"=>"varchar(64) NOT NULL", "userid"=>"int(11) NOT NULL", "bizrule"=>"text", "data"=>"text", "PRIMARY KEY (itemname, userid)" ), $options);
What is the reason for 'to' in the template table?
The template example seems to be incomplete.
The controller code starts of good by using a dedicated scenario "register" but that feature is not used.
-...
opinion
Thanks for your opinion I will be add in feature
In this tutorial I add a only concept about the how to replace the email template variable so may be focus the below code
$findTemplateModel = UtilityHtml::FindEMailTempalte('User Registration Notification');//get a template name using email_template table $description = $findTemplateModel->description;//get the template content with varibles $subject = $findTemplateModel->subject; $variables=array( '{fname}'=>$_POST['VkUsers']['fname'], '{lname}'=>$_POST['VkUsers']['lname'], '{email}'=>$_POST['VkUsers']['email'], '{dob}'=>$model->dob, '{password}'=>$pwd, ); $final_array = $this->EmailSendArray($description, $variables);//replace varibles $send_mail_data = array( 'firstname' => ucwords($_POST['VkUsers']['fname']), 'content'=>$final_array, ); $message = $this->renderPartial('/index/_template',$send_mail_data,true);//call a template view $result = $this->actionMailSend($_POST['VkUsers']['email'],$addbcc="", $_POST['VkUsers']['fname'], $subject, $message);//send mail
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.