Jump to content

Image de présentation pour page cms


Recommended Posts

Bonjour à tous,

 

J'essaye en vain d'ajouter la possibilité d'ajouter une sorte d'image à la une pour les pages cms.

 

J'ai réussi à créer le champs d'upload, j'ai ajouté un champs dans la table "ps_cms" pour stocker la donnée mais pas moyen de télécharger ni de stocker l'image.

 

Je me suis basé sur le sytème utilisés pour les catégories mais sans succés

 

Voici mon adminCMScontroller.php si ca peut aider :

<?php
/*
* 2007-2013 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-2013 PrestaShop SA
*  @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('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'),
   'featured' => array('title' => $this->l('Page d\'accueil'), 'width' => 25, 'align' => 'center', 'featured' => 'status', 'type' => 'bool', 'orderby' => false),
   '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' => 'thumbnail',
	'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()
{
$obj = $this->loadObject(true);
  if (!$this->loadObject(true))
   return;

  if (Validate::isLoadedObject($this->object))
   $this->display = 'edit';
  else
   $this->display = 'add';
  $this->toolbar_btn['save-and-preview'] = array(
   'href' => '#',
   'desc' => $this->l('Save and preview')
  );
  $this->toolbar_btn['save-and-stay'] = array(
   'short' => 'SaveAndStay',
   'href' => '#',
   'desc' => $this->l('Save and stay'),
  );
  $this->initToolbar();
  $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, and 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' => 'radio',
					'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' => 'file',
		   		 'label' => $this->l('thumbnail'),
		   		 'name' => 'thumbnail',
				 'display_image' => true,
		   		 'required' => false,
		   		 'hint' => $this->l('Only letters and the minus (-) character are allowed')
		   	 ),
			 array(
				'type' => 'date',
				'label' => $this->l('date'),
				'name' => 'page_date',
				'required' => true
			),
									  //<------------------------------------------------------ featured field
	array(
	 'type' => 'radio',
	 'label' => $this->l('Page d\'accueil:'),
	 'name' => 'featured',
	 'required' => false,
	 'class' => 't',
	 'is_bool' => true,
	 'values' => array(
	  array(
	   'id' => 'featured_on',
	   'value' => 1,
	   'label' => $this->l('Oui')
	  ),
	  array(
	   'id' => 'featured_off',
	   'value' => 0,
	   'label' => $this->l('Non')
	  )
	 ),
	),
				 //<------------------------------------------------END featured field

	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,
   'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL')
  );
  if (!($obj = $this->loadObject(true)))
	return;
	
  $image = ImageManager::thumbnail(_PS_IMG_DIR_.'thumbnail/'.$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_IMG_DIR_.'thumbnail/'.$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);
}

public function postProcess()
{
  if (Tools::isSubmit($this->table.'Orderby') || Tools::isSubmit($this->table.'Orderway'))
   $this->filter = true;

  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 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('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);
					$params = http_build_query(array(
						'adtoken' => Tools::getAdminTokenLite('AdminCmsContent'),
						'ad' => $admin_dir,
						'id_employee' => (int)$this->context->employee->id)
						);
					if (Configuration::get('PS_REWRITING_SETTINGS'))
						$params = '?'.$params;
					else
						$params = '&'.$params;
					$preview_url .= $cms->active ? '' : $params;
				}
				Tools::redirectAdmin($preview_url);
			}
			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')))
  {
   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()))
	{
	 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);
}

protected function postImage($id)
	{
		$ret = parent::postImage($id);
		if (isset($_FILES) && count($_FILES) && $_FILES['thumbnail']['name'] != null && file_exists(_PS_IMG_DIR_.$id_category.'.jpg'))
		{
			$images_types = ImageType::getImagesTypes('categories');
			foreach ($images_types as $k => $image_type)
			{
				ImageManager::resize(
					_PS_CAT_IMG_DIR_.$id_category.'.jpg',
					_PS_CAT_IMG_DIR_.$id_category.'-'.stripslashes($image_type['name']).'.jpg',
					(int)$image_type['width'], (int)$image_type['height']
				);
			}
		}

		return $ret;
	}
}
Link to comment
Share on other sites

En fait, j'essaye d'ajouter une image de présenation de la page mais qui ne sera pas obligatoirment affichée dans le contenu de la page, je veux donc avoir un champ en plus et ne pas simplement l'ajouter via l'éditeur de texte

Link to comment
Share on other sites

D'accord je comprends !

 

Et bien la solution que je vois, ça pourrait être un module qui, dans sa configuration, ferait la liste des page CMS existante et permettrait de lier une image uploadé ou déjà présente dans un répertoire à la page CMS.

 

Dans le contenu du module, ajouter un handler ou tu as besoin pour récupérer les images et les faire apparaître ou tu le souhaites.

 

Sinon surement en faisant un override des classes/controllers admin, mais je vois pas trop..

Link to comment
Share on other sites

J'vais essayer de te donner des infos au fil de l'eau parce que j'ai pas trop le temps :)

 

Tu as une méthode copyFromPost qui remplis les champs du tableau $definition de ton objet CMS avec les valeurs contenu dans tes champs.

 

J'imagine que si tu veux faire ça à la brutasse, va falloir faire des modifs pour que ton champs soit dans la définition du CMS et que tu ai la correspondance dans la base de donnée.

 

Ensuite peut être que tu peux réutiliser un upload / verification d'image déja présente dans les articles pour faire pareil avec ton champs image CMS.

 

(et bien pensé à unlink ton image quand tu supprimes ta page CMS)

Link to comment
Share on other sites

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...