Kayıt Ol

Giriş

Şifremi Kaybettim

Şifreni mi unuttun? Lütfen e-mail adresinizi giriniz. Bir bağlantı alacaksınız ve e-posta yoluyla yeni bir şifre oluşturacaksınız.

soru ekleme

Soru sormak için giriş yapmalısınız.

Custom cms page and fields display frontend content?

Hi all! I am new PrestaShop user and like to explore it for upcoming production.
I found this is nice product but like to get more in the cms.

What I have done is..

 

root/newpage.php

 <?php   /*  Create a custom page in PrestaShop without CMS - Custom Page File   /*  Read the detailed tutorial at https://iftakharhasan.wordpress.com/prestashop-create-a-custom-page-without-cms    */   include(dirname(__FILE__).'/config/config.inc.php');   Tools::displayFileAsDeprecated();     include(dirname(__FILE__).'/header.php');     $smarty->display(_PS_THEME_DIR_.'newpage.tpl');     include(dirname(__FILE__).'/footer.php'); 

override/controllers/front – NewPageController.php

 <?php   /*  Create a custom page in PrestaShop without CMS - CustomPageController class   /*  Read the detailed tutorial at https://iftakharhasan.wordpress.com/prestashop-create-a-custom-page-without-cms    */     /*  The classname here will be the name of the controller  */   class NewPageController extends FrontController{   	   	public $php_self = 'newpage';       public function init(){       parent::init();     }           public function initContent(){       parent::initContent();       $this->setTemplate(_PS_THEME_DIR_.'newpage.tpl');     }     /*  The following code portion is optional.   /*  Remove the double-slashes to activate the portion   /*  if you want to use external stylesheet and JavaScript for the page.   /*  Create the CSS and JS files in the css and js directories of the theme accordingly    */         //public function setMedia(){       //parent::setMedia();       //$this->addCSS(_THEME_CSS_DIR_.'custom-page.css');       //$this->addJS(_THEME_JS_DIR_.'custom-page.js');     //}      } 

themes/default-bootstrap/ – newpage.tpl

 <div>   <!-- Your HTML elements go here --> </div>   {literal}   <style type="text/css">     /* Your CSS goes here */   </style> {/literal}    <script type="text/javascript">   {literal}     // Your JavaScript goes here   {/literal} </script> 

This above part is for the custom pages and thanks to https://iftakharhasa…age-without-cms

 

Then I have the custom cms field part witch work also great and it saves it to backend.

override/classes – CMS.php

 <?php class CMS extends CMSCore { public $yourfield; // <--------------------------------------------------   /**   * @see ObjectModel::$definition   */ public static $definition = array(   'table' => 'cms',   'primary' => 'id_cms',   'multilang' => true,   'fields' => array(    'id_cms_category' =>  array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),    'position' =>    array('type' => self::TYPE_INT),    'active' =>    array('type' => self::TYPE_BOOL),    // Lang fields    'meta_description' =>  array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),    'meta_keywords' =>   array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),    'meta_title' =>   array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 128),    'content' =>    array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString', 'size' => 3999999999999),    'yourfield' =>   array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString', 'size' => 3999999999999),  ),// <-- and your desired properties ); } 

override/controllers/admin – AdminCmsController.php

 <?php /* * 2007-2015 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * *  @author PrestaShop SA <contact@prestashop.com> *  @copyright  2007-2015 PrestaShop SA *  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0) *  International Registered Trademark & Property of PrestaShop SA */  /**  * @property CMS $object  */ class AdminCmsControllerCore extends AdminController { 	protected $category;  	public $id_cms_category;  	protected $position_identifier = 'id_cms';  	public function __construct() 	{ 		$this->bootstrap = true; 		$this->table = 'cms'; 		$this->list_id = 'cms'; 		$this->className = 'CMS'; 		$this->lang = true; 		$this->addRowAction('edit'); 		$this->addRowAction('delete'); 		$this->_orderBy = 'position';  		$this->bulk_actions = array( 			'delete' => array( 				'text' => $this->l('Delete selected'), 				'confirm' => $this->l('Delete selected items?'), 				'icon' => 'icon-trash' 			) 		); 		$this->fields_list = array( 			'id_cms' => array('title' => $this->l('ID'), 'align' => 'center', 'class' => 'fixed-width-xs'), 			'link_rewrite' => array('title' => $this->l('URL')), 			'meta_title' => array('title' => $this->l('Title'), 'filter_key' => 'b!meta_title'), 			'position' => array('title' => $this->l('Position'),'filter_key' => 'position', 'align' => 'center', 'class' => 'fixed-width-sm', 'position' => 'position'), 			'active' => array('title' => $this->l('Displayed'), 'align' => 'center', 'active' => 'status', 'class' => 'fixed-width-sm', 'type' => 'bool', 'orderby' => false) 		);  		// The controller can't be call directly 		// In this case, AdminCmsContentController::getCurrentCMSCategory() is null 		if (!AdminCmsContentController::getCurrentCMSCategory()) 		{ 			$this->redirect_after = '?controller=AdminCmsContent&token='.Tools::getAdminTokenLite('AdminCmsContent'); 			$this->redirect(); 		}  		$this->_category = AdminCmsContentController::getCurrentCMSCategory(); 		$this->tpl_list_vars['icon'] = 'icon-folder-close'; 		$this->tpl_list_vars['title'] = sprintf($this->l('Pages in category "%s"'), 			$this->_category->name[Context::getContext()->employee->id_lang]); 		$this->_join = ' 		LEFT JOIN `'._DB_PREFIX_.'cms_category` c ON (c.`id_cms_category` = a.`id_cms_category`)'; 		$this->_select = 'a.position '; 		$this->_where = ' AND c.id_cms_category = '.(int)$this->_category->id;  		parent::__construct(); 	}  	public function initPageHeaderToolbar() 	{ 		$this->page_header_toolbar_btn['save-and-preview'] = array( 			'href' => '#', 			'desc' => $this->l('Save and preview', null, null, false) 		); 		$this->page_header_toolbar_btn['save-and-stay'] = array( 			'short' => $this->l('Save and stay', null, null, false), 			'href' => '#', 			'desc' => $this->l('Save and stay', null, null, false), 		);  		return parent::initPageHeaderToolbar(); 	}  	public function renderForm() 	{ 		if (!$this->loadObject(true)) 			return;  		if (Validate::isLoadedObject($this->object)) 			$this->display = 'edit'; 		else 			$this->display = 'add';  		$this->initToolbar(); 		$this->initPageHeaderToolbar();  		$categories = CMSCategory::getCategories($this->context->language->id, false); 		$html_categories = CMSCategory::recurseCMSCategory($categories, $categories[0][1], 1, $this->getFieldValue($this->object, 'id_cms_category'), 1);  		$this->fields_form = array( 			'tinymce' => true, 			'legend' => array( 				'title' => $this->l('CMS Page'), 				'icon' => 'icon-folder-close' 			), 			'input' => array( 				// custom template 				array( 					'type' => 'select_category', 					'label' => $this->l('CMS Category'), 					'name' => 'id_cms_category', 					'options' => array( 						'html' => $html_categories, 					), 				), 				array( 					'type' => 'text', 					'label' => $this->l('Meta title'), 					'name' => 'meta_title', 					'id' => 'name', // for copyMeta2friendlyURL compatibility 					'lang' => true, 					'required' => true, 					'class' => 'copyMeta2friendlyURL', 					'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}' 				), 				array( 					'type' => 'text', 					'label' => $this->l('Meta description'), 					'name' => 'meta_description', 					'lang' => true, 					'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}' 				), 				array( 					'type' => 'tags', 					'label' => $this->l('Meta keywords'), 					'name' => 'meta_keywords', 					'lang' => true, 					'hint' => array( 						$this->l('To add "tags" click in the field, write something, and then press "Enter."'), 						$this->l('Invalid characters:').' &lt;&gt;;=#{}' 					) 				), 				array( 					'type' => 'text', 					'label' => $this->l('Friendly URL'), 					'name' => 'link_rewrite', 					'required' => true, 					'lang' => true, 					'hint' => $this->l('Only letters and the hyphen (-) character are allowed.') 				), 				array( 					'type' => 'textarea', 					'label' => $this->l('Page content'), 					'name' => 'content', 					'autoload_rte' => true, 					'lang' => true, 					'rows' => 5, 					'cols' => 40, 					'hint' => $this->l('Invalid characters:').' <>;=#{}' 				), 				array(//<------------------------------------------------------------------------- your field 				 'type' => 'text', 				 'label' => $this->l('your field'), 				 'name' => 'yourfield', //<--------------------------------------------------same name as CMS.php ofcourse 				 'required' => true, 				 'lang' => true, 				 'hint' => $this->l('Only letters and the minus (-) character are allowed') 			    ),//<--------------------------------------------------------------------------- end your field 				array( 					'type' => 'switch', 					'label' => $this->l('Indexation by search engines'), 					'name' => 'indexation', 					'required' => false, 					'class' => 't', 					'is_bool' => true, 					'values' => array( 						array( 							'id' => 'indexation_on', 							'value' => 1, 							'label' => $this->l('Enabled') 						), 						array( 							'id' => 'indexation_off', 							'value' => 0, 							'label' => $this->l('Disabled') 						) 					), 				), 				array( 					'type' => 'switch', 					'label' => $this->l('Displayed'), 					'name' => 'active', 					'required' => false, 					'is_bool' => true, 					'values' => array( 						array( 							'id' => 'active_on', 							'value' => 1, 							'label' => $this->l('Enabled') 						), 						array( 							'id' => 'active_off', 							'value' => 0, 							'label' => $this->l('Disabled') 						) 					), 				), 			), 			'submit' => array( 				'title' => $this->l('Save'), 			), 			'buttons' => array( 				'save_and_preview' => array( 					'name' => 'viewcms', 					'type' => 'submit', 					'title' => $this->l('Save and preview'), 					'class' => 'btn btn-default pull-right', 					'icon' => 'process-icon-preview' 				) 			) 		);  		if (Shop::isFeatureActive()) 		{ 			$this->fields_form['input'][] = array( 				'type' => 'shop', 				'label' => $this->l('Shop association'), 				'name' => 'checkBoxShopAsso', 			); 		}  		if (Validate::isLoadedObject($this->object)) 			$this->context->smarty->assign('url_prev', $this->getPreviewUrl($this->object));  		$this->tpl_form_vars = array( 			'active' => $this->object->active, 			'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL') 		); 		return parent::renderForm(); 	}  	public function renderList() 	{ 		$this->_group = 'GROUP BY a.`id_cms`'; 		//self::$currentIndex = self::$currentIndex.'&cms'; 		$this->position_group_identifier = (int)$this->id_cms_category;  		$this->toolbar_title = $this->l('Pages in this category'); 		$this->toolbar_btn['new'] = array( 			'href' => self::$currentIndex.'&add'.$this->table.'&id_cms_category='.(int)$this->id_cms_category.'&token='.$this->token, 			'desc' => $this->l('Add new') 		);  		return parent::renderList(); 	}  	public function displayList($token = null) 	{ 		/* Display list header (filtering, pagination and column names) */ 		$this->displayListHeader($token); 		if (!count($this->_list)) 			echo '<tr><td class="center" colspan="'.(count($this->fields_list) + 2).'">'.$this->l('No items found').'</td></tr>';  		/* Show the content of the table */ 		$this->displayListContent($token);  		/* Close list table and submit button */ 		$this->displayListFooter($token); 	}  	public function postProcess() 	{ 		if (Tools::isSubmit('viewcms') && ($id_cms = (int)Tools::getValue('id_cms'))) 		{ 			parent::postProcess(); 			if (($cms = new CMS($id_cms, $this->context->language->id)) && Validate::isLoadedObject($cms)) 				Tools::redirectAdmin(self::$currentIndex.'&id_cms='.$id_cms.'&conf=4&updatecms&token='.Tools::getAdminTokenLite('AdminCmsContent').'&url_preview=1'); 		} 		elseif (Tools::isSubmit('deletecms')) 		{ 			if (Tools::getValue('id_cms') == Configuration::get('PS_CONDITIONS_CMS_ID')) 			{ 				Configuration::updateValue('PS_CONDITIONS', 0); 				Configuration::updateValue('PS_CONDITIONS_CMS_ID', 0); 			} 			$cms = new CMS((int)Tools::getValue('id_cms')); 			$cms->cleanPositions($cms->id_cms_category); 			if (!$cms->delete()) 				$this->errors[] = Tools::displayError('An error occurred while deleting the object.') 					.' <b>'.$this->table.' ('.Db::getInstance()->getMsgError().')</b>'; 			else 				Tools::redirectAdmin(self::$currentIndex.'&id_cms_category='.$cms->id_cms_category.'&conf=1&token='.Tools::getAdminTokenLite('AdminCmsContent')); 		}/* Delete multiple objects */ 		elseif (Tools::getValue('submitDel'.$this->table)) 		{ 			if ($this->tabAccess['delete'] === '1') 			{ 				if (Tools::isSubmit($this->table.'Box')) 				{ 					$cms = new CMS(); 					$result = true; 					$result = $cms->deleteSelection(Tools::getValue($this->table.'Box')); 					if ($result) 					{ 						$cms->cleanPositions((int)Tools::getValue('id_cms_category')); 						$token = Tools::getAdminTokenLite('AdminCmsContent'); 						Tools::redirectAdmin(self::$currentIndex.'&conf=2&token='.$token.'&id_cms_category='.(int)Tools::getValue('id_cms_category')); 					} 					$this->errors[] = Tools::displayError('An error occurred while deleting this selection.');  				} 				else 					$this->errors[] = Tools::displayError('You must select at least one element to delete.'); 			} 			else 				$this->errors[] = Tools::displayError('You do not have permission to delete this.'); 		} 		elseif (Tools::isSubmit('submitAddcms') || Tools::isSubmit('submitAddcmsAndPreview')) 		{ 			parent::validateRules(); 			if (count($this->errors)) 				return false; 			if (!$id_cms = (int)Tools::getValue('id_cms')) 			{ 				$cms = new CMS(); 				$this->copyFromPost($cms, 'cms'); 				if (!$cms->add()) 					$this->errors[] = Tools::displayError('An error occurred while creating an object.').' <b>'.$this->table.' ('.Db::getInstance()->getMsgError().')</b>'; 				else 					$this->updateAssoShop($cms->id); 			} 			else 			{ 				$cms = new CMS($id_cms); 				$this->copyFromPost($cms, 'cms'); 				if (!$cms->update()) 					$this->errors[] = Tools::displayError('An error occurred while updating an object.').' <b>'.$this->table.' ('.Db::getInstance()->getMsgError().')</b>'; 				else 					$this->updateAssoShop($cms->id); 			} 			if (Tools::isSubmit('view'.$this->table)) 				Tools::redirectAdmin(self::$currentIndex.'&id_cms='.$cms->id.'&conf=4&updatecms&token='.Tools::getAdminTokenLite('AdminCmsContent').'&url_preview=1'); 			elseif (Tools::isSubmit('submitAdd'.$this->table.'AndStay')) 				Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$cms->id.'&conf=4&update'.$this->table.'&token='.Tools::getAdminTokenLite('AdminCmsContent')); 			else 				Tools::redirectAdmin(self::$currentIndex.'&id_cms_category='.$cms->id_cms_category.'&conf=4&token='.Tools::getAdminTokenLite('AdminCmsContent')); 		} 		elseif (Tools::isSubmit('way') && Tools::isSubmit('id_cms') && (Tools::isSubmit('position'))) 		{ 			/** @var CMS $object */ 			if ($this->tabAccess['edit'] !== '1') 				$this->errors[] = Tools::displayError('You do not have permission to edit this.'); 			elseif (!Validate::isLoadedObject($object = $this->loadObject())) 				$this->errors[] = Tools::displayError('An error occurred while updating the status for an object.') 					.' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)'); 			elseif (!$object->updatePosition((int)Tools::getValue('way'), (int)Tools::getValue('position'))) 				$this->errors[] = Tools::displayError('Failed to update the position.'); 			else 				Tools::redirectAdmin(self::$currentIndex.'&'.$this->table.'Orderby=position&'.$this->table.'Orderway=asc&conf=4&id_cms_category='.(int)$object->id_cms_category.'&token='.Tools::getAdminTokenLite('AdminCmsContent')); 		} 		/* Change object statuts (active, inactive) */ 		elseif (Tools::isSubmit('statuscms') && Tools::isSubmit($this->identifier)) 		{ 			if ($this->tabAccess['edit'] === '1') 			{ 				if (Validate::isLoadedObject($object = $this->loadObject())) 				{ 					/** @var CMS $object */ 					if ($object->toggleStatus()) 						Tools::redirectAdmin(self::$currentIndex.'&conf=5&id_cms_category='.(int)$object->id_cms_category.'&token='.Tools::getValue('token')); 					else 						$this->errors[] = Tools::displayError('An error occurred while updating the status.'); 				} 				else 					$this->errors[] = Tools::displayError('An error occurred while updating the status for an object.') 						.' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)'); 			} 			else 				$this->errors[] = Tools::displayError('You do not have permission to edit this.'); 		} 		/* Delete multiple CMS content */ 		elseif (Tools::isSubmit('submitBulkdeletecms')) 		{ 			if ($this->tabAccess['delete'] === '1') 			{ 				$this->action = 'bulkdelete'; 				$this->boxes = Tools::getValue($this->table.'Box'); 				if (is_array($this->boxes) && array_key_exists(0, $this->boxes)) 				{ 					$firstCms = new CMS((int)$this->boxes[0]); 					$id_cms_category = (int)$firstCms->id_cms_category; 					if (!$res = parent::postProcess(true)) 						return $res; 					Tools::redirectAdmin(self::$currentIndex.'&conf=2&token='.Tools::getAdminTokenLite('AdminCmsContent').'&id_cms_category='.$id_cms_category); 				} 			} 			else 				$this->errors[] = Tools::displayError('You do not have permission to delete this.'); 		} 		else 			parent::postProcess(true); 	}  	public function getPreviewUrl(CMS $cms) 	{ 		$preview_url = $this->context->link->getCMSLink($cms, null, null, $this->context->language->id); 		if (!$cms->active) 		{ 			$params = http_build_query(array( 				'adtoken' => Tools::getAdminTokenLite('AdminCmsContent'), 				'ad' => basename(_PS_ADMIN_DIR_), 				'id_employee' => (int)$this->context->employee->id 				) 			); 			$preview_url .= (strpos($preview_url, '?') === false ? '?' : '&').$params; 		}  		return $preview_url; 	} }  

Last I have add new field on the db ps_cms_lang yourfield (LONGTEXT)

Now the templating part.
I have modify the header.tpl
 

 {if $page_name == 'newpage'} 				 				{else} 						 						{if $page_name !='index' && $page_name !='pagenotfound'} 							{include file="$tpl_dir./breadcrumb.tpl"} 						{/if} 					 					 					 					<div id="slider_row" class="row"> 						<div id="top_column" class="center_column col-xs-12 col-sm-12">{hook h="displayTopColumn"}</div> 					</div> 					<div class="row"> 						{if isset($left_column_size) && !empty($left_column_size)} 						<div id="left_column" class="column col-xs-12 col-sm-{$left_column_size|intval}">{$HOOK_LEFT_COLUMN}</div> 						{/if} 						{if isset($left_column_size) && isset($right_column_size)}{assign var='cols' value=(12 - $left_column_size - $right_column_size)}{else}{assign var='cols' value=12}{/if} 						<div id="center_column" class="center_column col-xs-12 col-sm-{$cols|intval}"> 				{/if} 

Now in the newpage.tpl like to show the cms content and the yourfield.
How do I to this? {$cms->content}  it dosen´t show nothing.

I will be grateful if some one have time to answer this one.

Hakkında PrestaEticaret

Firmamız; e-ticaret sektöründe hizmet sunmak için 2009 yılında PrestaEticaret olarak İzmir’de kurulmuştur. Kurulduğu tarihten itibaren bireysel ve kurumsal tüm müşterilerin memnuniyetine önem vermiş, güvenli ve hızlı çözümler üretmiştir. 2009 yılı son çeyreğinde hizmet halkasını genişleterek sektör firmalarına internet danışmanlık hizmeti de vermeye başlamıştır. Bu alanda hizmet politikasını daima müşteri odaklı tutarak ihtiyaca en uygun çözümü sağlamayı hedeflemiş ve başarmıştır. Diğer e-ticaret ve danışmanlık şirketlerinden farklı olarak zamana dayalı bilgi ve tecrübesini müşterileriyle paylaşarak, hizmet standartlarını zirvede tutmayı ilke edinmiş bir oluşumdur. Hizmetlerimizden faydalanın prestijinizi ve satışlarınızı arttırın.

Cevap bırakın

Ücretsiz E-Ticaret Yazılımı ( PrestaShop )