Jump to content

custom image fieled to cms page


razvypp

Recommended Posts

Hello,

I want to add an extra field to the CMS page, so that it can have thumbnails.

 

I added the lines in the cms.php and admincmscontroller.php and it works if I have it for example a text file to complete. But i want a normal file upload. this is my code.

 

Why doesn't it upload the image and copy the field in to the dabase , like when the field is type text?

 

Thanks.

 

 

CMS.php

<?php
/*
* 2007-2012 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-2012 PrestaShop SA
*  @version  Release: $Revision: 7040 $
*  @license	http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/
class CMSCore extends ObjectModel
{
/** @var string Name */
public $meta_title;
public $meta_description;
public $meta_keywords;
public $content;
public $link_rewrite;
public $id_cms_category;
public $position;
public $active;
public $thumbnail;
/**
 * @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),
  'link_rewrite' =>   array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 128),
  'content' =>	array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString', 'size' => 3999999999999),
  'image' =>	 array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString', 'size' => 3999999999999),
 ),
);
protected $webserviceParameters = array(
 'objectNodeName' => 'content',
 'objectsNodeName' => 'content_management_system',
);
public function add($autodate = true, $null_values = false)
{
 $this->position = CMS::getLastPosition((int)$this->id_cms_category);
 return parent::add($autodate, true);
}
public function update($null_values = false)
{
 if (parent::update($null_values))
  return $this->cleanPositions($this->id_cms_category);
 return false;
}
public function delete()
{
  if (parent::delete())
  return $this->cleanPositions($this->id_cms_category);
 return false;
}
public static function getLinks($id_lang, $selection = null, $active = true, Link $link = null)
{
 if (!$link)
  $link = Context::getContext()->link;
 $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
 SELECT c.id_cms, cl.link_rewrite, cl.meta_title
 FROM '._DB_PREFIX_.'cms c
 LEFT JOIN '._DB_PREFIX_.'cms_lang cl ON (c.id_cms = cl.id_cms AND cl.id_lang = '.(int)$id_lang.')
 '.Shop::addSqlAssociation('cms', 'c').'
 WHERE 1
 '.(($selection !== null) ? ' AND c.id_cms IN ('.implode(',', array_map('intval', $selection)).')' : '').
 ($active ? ' AND c.`active` = 1 ' : '').
 'GROUP BY c.id_cms
 ORDER BY c.`position`');
 $links = array();
 if ($result)
  foreach ($result as $row)
  {
$row['link'] = $link->getCMSLink((int)$row['id_cms'], $row['link_rewrite']);
$links[] = $row;
  }
 return $links;
}
public static function listCms($id_lang = null, $id_block = false, $active = true)
{
 if (empty($id_lang))
  $id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
 return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
 SELECT c.id_cms, l.meta_title
 FROM  '._DB_PREFIX_.'cms c
 JOIN '._DB_PREFIX_.'cms_lang l ON (c.id_cms = l.id_cms)
 '.Shop::addSqlAssociation('cms', 'c').'
 '.(($id_block) ? 'JOIN '._DB_PREFIX_.'block_cms b ON (c.id_cms = b.id_cms)' : '').'
 WHERE l.id_lang = '.(int)$id_lang.(($id_block) ? ' AND b.id_block = '.(int)$id_block : '').($active ? ' AND c.`active` = 1 ' : '').'
 GROUP BY c.id_cms
 ORDER BY c.`position`');
}
public function updatePosition($way, $position)
{
 if (!$res = Db::getInstance()->executeS('
  SELECT cp.`id_cms`, cp.`position`, cp.`id_cms_category`
  FROM `'._DB_PREFIX_.'cms` cp
  WHERE cp.`id_cms_category` = '.(int)$this->id_cms_category.'
  ORDER BY cp.`position` ASC'
 ))
  return false;
 foreach ($res as $cms)
  if ((int)$cms['id_cms'] == (int)$this->id)
$moved_cms = $cms;
 if (!isset($moved_cms) || !isset($position))
  return false;
 // < and > statements rather than BETWEEN operator
 // since BETWEEN is treated differently according to databases
 return (Db::getInstance()->execute('
  UPDATE `'._DB_PREFIX_.'cms`
  SET `position`= `position` '.($way ? '- 1' : '+ 1').'
  WHERE `position`
  '.($way
? '> '.(int)$moved_cms['position'].' AND `position` <= '.(int)$position
: '< '.(int)$moved_cms['position'].' AND `position` >= '.(int)$position).'
  AND `id_cms_category`='.(int)$moved_cms['id_cms_category'])
 && Db::getInstance()->execute('
  UPDATE `'._DB_PREFIX_.'cms`
  SET `position` = '.(int)$position.'
  WHERE `id_cms` = '.(int)$moved_cms['id_cms'].'
  AND `id_cms_category`='.(int)$moved_cms['id_cms_category']));
}
public static function cleanPositions($id_category)
{
 $sql = '
 SELECT `id_cms`
 FROM `'._DB_PREFIX_.'cms`
 WHERE `id_cms_category` = '.(int)$id_category.'
 ORDER BY `position`';
 $result = Db::getInstance()->executeS($sql);
 for ($i = 0, $total = count($result); $i < $total; ++$i)
 {
  $sql = 'UPDATE `'._DB_PREFIX_.'cms`
 SET `position` = '.(int)$i.'
 WHERE `id_cms_category` = '.(int)$id_category.'
  AND `id_cms` = '.(int)$result[$i]['id_cms'];
  Db::getInstance()->execute($sql);
 }
 return true;
}
public static function getLastPosition($id_category)
{
 $sql = '
 SELECT MAX(position) + 1
 FROM `'._DB_PREFIX_.'cms`
 WHERE `id_cms_category` = '.(int)$id_category;
 return (Db::getInstance()->getValue($sql));
}
public static function getCMSPages($id_lang = null, $id_cms_category = null, $active = true)
{
 $sql = new DbQuery();
 $sql->select('*');
 $sql->from('cms', 'c');
 if ($id_lang)
  $sql->innerJoin('cms_lang', 'l', 'c.id_cms = l.id_cms AND l.id_lang = '.(int)$id_lang);
 if ($active)
  $sql->where('c.active = 1');
 if ($id_cms_category)
  $sql->where('c.id_cms_category = '.(int)$id_cms_category);
 $sql->orderBy('position');
 return Db::getInstance()->executeS($sql);
}
public static function getUrlRewriteInformations($id_cms)
{
 $sql = 'SELECT l.`id_lang`, c.`link_rewrite`
FROM `'._DB_PREFIX_.'cms_lang` AS c
LEFT JOIN  `'._DB_PREFIX_.'lang` AS l ON c.`id_lang` = l.`id_lang`
WHERE c.`id_cms` = '.(int)$id_cms.'
AND l.`active` = 1';
 return Db::getInstance()->executeS($sql);
}
}

 

 

adminCmsController.php

 

<?php
/*
* 2007-2012 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-2012 PrestaShop SA
*  @version  Release: $Revision: 7300 $
*  @license	http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

class AdminCmsControllerCore extends AdminController
{
protected $category;

public $id_cms_category;

protected $position_identifier = 'id_cms';

public function __construct()
{
	$this->table = 'cms';
	$this->className = 'CMS';
	$this->lang = true;
	$this->addRowAction('view');
	$this->addRowAction('edit');
	$this->addRowAction('delete');
	$this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));

	$this->fields_list = array(
		'id_cms' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
		'link_rewrite' => array('title' => $this->l('URL'), 'width' => 'auto'),
		'meta_title' => array('title' => $this->l('Title'), 'width' => '300', 'filter_key' => 'b!meta_title'),
		'position' => array('title' => $this->l('Position'), 'width' => 40,'filter_key' => 'position', 'align' => 'center', 'position' => 'position'),
		'active' => array('title' => $this->l('Displayed'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false)
		);


	 $this->fieldImageSettings = array(
		 'name' => 'image',
		 'dir' => 'thumbnail'
	 );

	// 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->_join = '
	LEFT JOIN `'._DB_PREFIX_.'cms_category` c ON (c.`id_cms_category` = a.`id_cms_category`)';
	$this->_select = 'a.position ';
	$this->_filter = 'AND c.id_cms_category = '.(int)$this->_category->id;

	parent::__construct();
}

public function renderForm()
{
	$this->display = 'edit';
	$this->toolbar_btn['save-and-preview'] = array(
		'href' => '#',
		'desc' => $this->l('Save and preview')
	);
	$this->initToolbar();
	if (!$this->loadObject(true))
		return;

	$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'),
			'image' => '../img/admin/tab-categories.gif'
		),
		'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 copy2friendlyUrl compatibility
				'lang' => true,
				'required' => true,
				'class' => 'copy2friendlyUrl',
				'hint' => $this->l('Invalid characters:').' <>;=#{}',
				'size' => 50
			),
			array(
				'type' => 'text',
				'label' => $this->l('Meta description'),
				'name' => 'meta_description',
				'lang' => true,
				'hint' => $this->l('Invalid characters:').' <>;=#{}',
				'size' => 70
			),
			array(
				'type' => 'tags',
				'label' => $this->l('Meta keywords'),
				'name' => 'meta_keywords',
				'lang' => true,
				'hint' => $this->l('Invalid characters:').' <>;=#{}',
				'size' => 70,
				'desc' => $this->l('To add "tags" click in the field, write something, then press "Enter"')
			),
			array(
				'type' => 'text',
				'label' => $this->l('Friendly URL'),
				'name' => 'link_rewrite',
				'required' => true,
				'lang' => true,
				'hint' => $this->l('Only letters and the minus (-) 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(
	   		 'type' => 'file',
	   		 'label' => $this->l('thumbnail'),
	   		 'name' => 'image',
	   		 'required' => true,
	   		 'lang' => true,
	   		 'hint' => $this->l('Only letters and the minus (-) character are allowed')
	   	 ),
			array(
				'type' => 'radio',
				'label' => $this->l('Displayed:'),
				'name' => 'active',
				'required' => false,
				'class' => 't',
				'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   '),
			'class' => 'button'
		)
	);

	if (Shop::isFeatureActive())
	{
		$this->fields_form['input'][] = array(
			'type' => 'shop',
			'label' => $this->l('Shop association:'),
			'name' => 'checkBoxShopAsso',
		);
	}

	$this->tpl_form_vars = array(
		'active' => $this->object->active
	);


	$image = ImageManager::thumbnail(_PS_CAT_IMG_DIR_.'/'.$obj->id.'.jpg', $this->table.'_'.(int)$obj->id.'.'.$this->imageType, 350, $this->imageType, true);

	$this->fields_value = array(
		'image' => $image ? $image : false,
		'size' => $image ? filesize(_PS_CAT_IMG_DIR_.'/'.$obj->id.'.jpg') / 1000 : false
	);
	return parent::renderForm();
}

public function renderList()
{
	$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);
}

/**
 * Modifying initial getList method to display position feature (drag and drop)
 */
public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false)
{
	if ($order_by && $this->context->cookie->__get($this->table.'Orderby'))
		$order_by = $this->context->cookie->__get($this->table.'Orderby');
	else
		$order_by = 'position';

	parent::getList($id_lang, $order_by, $order_way, $start, $limit, $id_lang_shop);
}

public function postProcess()
{
	if (Tools::isSubmit('viewcms') && ($id_cms = (int)Tools::getValue('id_cms')) && ($cms = new CMS($id_cms, $this->context->language->id)) && Validate::isLoadedObject($cms))
	{
		$redir = $this->context->link->getCMSLink($cms);
		if (!$cms->active)
		{
			$admin_dir = dirname($_SERVER['PHP_SELF']);
			$admin_dir = substr($admin_dir, strrpos($admin_dir, '/') + 1);
			$redir .= '?adtoken='.Tools::getAdminTokenLite('AdminCmsContent').'&ad='.$admin_dir.'&id_employee='.(int)$this->context->employee->id;
		}
		Tools::redirectAdmin($redir);
	}
	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 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_category='.(int)Tools::getValue('id_cms_category'));
				}
				$this->errors[] = Tools::displayError('An error occurred while deleting 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 here.');
	}
	elseif (Tools::isSubmit('submitAddcms') || Tools::isSubmit('submitAddcmsAndPreview'))
	{
		parent::validateRules();
		if (!count($this->errors))
		{
			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 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 object.')
						.' <b>'.$this->table.' ('.Db::getInstance()->getMsgError().')</b>';
				else
					$this->updateAssoShop($cms->id);

			}
			if (Tools::isSubmit('submitAddcmsAndPreview'))
			{
				$alias = $this->getFieldValue($cms, 'link_rewrite', $this->context->language->id);
				$preview_url = $this->context->link->getCMSLink($cms, $alias, $this->context->language->id);

				if (!$cms->active)
				{
					$admin_dir = dirname($_SERVER['PHP_SELF']);
					$admin_dir = substr($admin_dir, strrpos($admin_dir, '/') + 1);
					$preview_url .= $cms->active ? '' : '&adtoken='.Tools::getAdminTokenLite('AdminCmsContent').'&ad='.$admin_dir.'&id_employee='.(int)$this->context->employee->id;
				}
				Tools::redirectAdmin($preview_url);
			}
			else
				Tools::redirectAdmin(self::$currentIndex.'&id_cms_category='.$cms->id_cms_category.'&conf=4&token='.Tools::getAdminTokenLite('AdminCmsContent'));
		}
	}
	elseif (Tools::getValue('position'))
	{
		if ($this->tabAccess['edit'] !== '1')
			$this->errors[] = Tools::displayError('You do not have permission to edit here.');
		elseif (!Validate::isLoadedObject($object = $this->loadObject()))
			$this->errors[] = Tools::displayError('An error occurred while updating status for 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_category = (int)Tools::getValue('id_cms_category')) ? ('&id_cms_category='.$id_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()))
			{
				if ($object->toggleStatus())
					Tools::redirectAdmin(self::$currentIndex.'&conf=5'.((int)Tools::getValue('id_cms_category') ? '&id_cms_category='.(int)Tools::getValue('id_cms_category') : '').'&token='.Tools::getValue('token'));
				else
					$this->errors[] = Tools::displayError('An error occurred while updating status.');
			}
			else
				$this->errors[] = Tools::displayError('An error occurred while updating status for object.')
					.' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
		}
		else
			$this->errors[] = Tools::displayError('You do not have permission to edit here.');
	}
	else
		parent::postProcess(true);
}
}


Link to comment
Share on other sites

  • 2 months later...

Hi,

 

Look your $definition array in the model... You basically just add a $thumbnail variable without including it in the $definitions array so of course this will not work.

 

If you took few hours to read the documentation, you would have found this directly so please RTFM.

 

So to summarize again: Add the $thumbnail to the definition array in the CMSCore model otherwise it will never work. If you need anything further than that, then please read the documentation of prestashop and it will click in less time than you took to write all that down.

 

BR,

RaPhiuS

Link to comment
Share on other sites

  • 1 year later...
  • 2 months later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...