vjandrei Posted July 23, 2015 Share Posted July 23, 2015 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://iftakharhasan.wordpress.com/2014/04/05/prestashop-create-a-custom-page-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 [email protected] 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 <[email protected]> * @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:').' <>;=#{}' ), array( 'type' => 'text', 'label' => $this->l('Meta description'), 'name' => 'meta_description', 'lang' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), 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:').' <>;=#{}' ) ), 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now