Jump to content

naulacambra

Members
  • Posts

    5
  • Joined

  • Last visited

Profile Information

  • Location
    España
  • Activity
    Developer

naulacambra's Achievements

Newbie

Newbie (1/14)

0

Reputation

  1. Hi, did you find a solution for this problem? It would help me a lot! Thanks
  2. Hello, it's been 1 week since I've started to work on this. My target is to add a gallery field to the suppliers form in the admin panel. I'm trying to use the same gallery field that use Categories. I've already overrided the suppliers controller. class AdminSuppliersController extends AdminSuppliersControllerCore { public function renderForm() { // loads current warehouse if (!($obj = $this->loadObject(true))) return; $image = _PS_SUPP_IMG_DIR_ . $obj->id . '.jpg'; $image_url = ImageManager::thumbnail($image, $this->table . '_' . (int) $obj->id . '.' . $this->imageType, 350, $this->imageType, true, true); $image_size = file_exists($image) ? filesize($image) / 1000 : false; $tmp_addr = new Address(); $res = $tmp_addr->getFieldsRequiredDatabase(); $required_fields = array(); foreach ($res as $row) $required_fields[(int) $row['id_required_field']] = $row['field_name']; $this->fields_form = array( 'legend' => array( 'title' => $this->l('Suppliers'), 'icon' => 'icon-truck' ), 'input' => array( array( 'type' => 'hidden', 'name' => 'id_address', ), array( 'type' => 'text', 'label' => $this->l('Name'), 'name' => 'name', 'required' => true, 'col' => 4, 'hint' => $this->l('Invalid characters:') . ' <>;=#{}', ), (in_array('company', $required_fields) ? array( 'type' => 'text', 'label' => $this->l('Company'), 'name' => 'company', 'display' => in_array('company', $required_fields), 'required' => in_array('company', $required_fields), 'maxlength' => 16, 'col' => 4, 'hint' => $this->l('Company name for this supplier') ) : null ), array( 'type' => 'textarea', 'label' => $this->l('Description'), 'name' => 'description', 'lang' => true, 'hint' => array( $this->l('Invalid characters:') . ' <>;=#{}', $this->l('Will appear in the list of suppliers.') ), 'autoload_rte' => 'rte' //Enable TinyMCE editor for short description ), array( 'type' => 'text', 'label' => $this->l('Phone'), 'name' => 'phone', 'required' => in_array('phone', $required_fields), 'maxlength' => 16, 'col' => 4, 'hint' => $this->l('Phone number for this supplier') ), array( 'type' => 'text', 'label' => $this->l('Mobile phone'), 'name' => 'phone_mobile', 'required' => in_array('phone_mobile', $required_fields), 'maxlength' => 16, 'col' => 4, 'hint' => $this->l('Mobile phone number for this supplier.') ), array( 'type' => 'text', 'label' => $this->l('Address'), 'name' => 'address', 'maxlength' => 128, 'col' => 6, 'required' => true ), array( 'type' => 'text', 'label' => $this->l('Zip/postal code'), 'name' => 'postcode', 'required' => in_array('postcode', $required_fields), 'maxlength' => 12, 'col' => 2, ), array( 'type' => 'text', 'label' => $this->l('City'), 'name' => 'city', 'maxlength' => 32, 'col' => 4, 'required' => true, ), array( 'type' => 'select', 'label' => $this->l('Country'), 'name' => 'id_country', 'required' => true, 'col' => 4, 'default_value' => (int) $this->context->country->id, 'options' => array( 'query' => Country::getCountries($this->context->language->id, false), 'id' => 'id_country', 'name' => 'name', ), ), array( 'type' => 'select', 'label' => $this->l('State'), 'name' => 'id_state', 'col' => 4, 'options' => array( 'id' => 'id_state', 'query' => array(), 'name' => 'name' ) ), array( 'type' => 'text', 'label' => $this->l('Region'), 'name' => 'address2', 'required' => in_array('address2', $required_fields), 'col' => 4, 'maxlength' => 32, ), array( 'type' => 'text', 'label' => $this->l('Tipus producte'), 'name' => 'tipus_producte', 'col' => 4, ), array( 'type' => 'file', 'label' => $this->l('Logo'), 'name' => 'logo', 'display_image' => true, 'image' => $image_url ? $image_url : false, 'size' => $image_size, 'hint' => $this->l('Upload a supplier logo from your computer.') ), array( 'type' => 'text', 'label' => $this->l('Video URL'), 'name' => 'url_video', 'col' => 4, ), array( 'type' => 'text', 'label' => $this->l('Meta title'), 'name' => 'meta_title', 'lang' => true, 'col' => 4, 'hint' => $this->l('Forbidden characters:') . ' <>;=#{}' ), array( 'type' => 'text', 'label' => $this->l('Meta description'), 'name' => 'meta_description', 'lang' => true, 'col' => 6, 'hint' => $this->l('Forbidden characters:') . ' <>;=#{}' ), array( 'type' => 'tags', 'label' => $this->l('Meta keywords'), 'name' => 'meta_keywords', 'lang' => true, 'col' => 6, 'hint' => array( $this->l('To add "tags" click in the field, write something and then press "Enter".'), $this->l('Forbidden characters:') . ' <>;=#{}' ) ), array( 'type' => 'switch', 'label' => $this->l('Enable'), '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'), ) ); $this->tpl_form_vars['displayBackOfficeCategory'] = Hook::exec('displayBackOfficeCategory'); // loads current address for this supplier - if possible $address = null; if (isset($obj->id)) { $id_address = Address::getAddressIdBySupplierId($obj->id); if ($id_address > 0) $address = new Address((int) $id_address); } // force specific fields values (address) if ($address != null) { $this->fields_value = array( 'id_address' => $address->id, 'phone' => $address->phone, 'phone_mobile' => $address->phone_mobile, 'address' => $address->address1, 'address2' => $address->address2, 'postcode' => $address->postcode, 'city' => $address->city, 'id_country' => $address->id_country, 'id_state' => $address->id_state, ); } else $this->fields_value = array( 'id_address' => 0, 'id_country' => Configuration::get('PS_COUNTRY_DEFAULT') ); if (Shop::isFeatureActive()) { $this->fields_form['input'][] = array( 'type' => 'shop', 'label' => $this->l('Shop association'), 'name' => 'checkBoxShopAsso', ); } return AdminController::renderForm(); } Note that also i've added some other fields, but they don't affect this matter. The important line that i've copied from the CategoriesController is $this->tpl_form_vars['displayBackOfficeCategory'] = Hook::exec('displayBackOfficeCategory'); Also, i've overrided the ModuleCore to add to the Suppliers Module the hook displayBackOfficeCategory. class Module extends ModuleCore { protected $allowed_mod = array( 'displayBackOfficeCategory' => array('blocksupplier'), ); public function hookDisplayBackOfficeCategory($params) { if (in_array($this->name, $this->allowed_mod['displayBackOfficeCategory'])) { if (Context::getContext()->controller->className == 'Supplier') { $supplier = new Supplier((int) Tools::getValue('id_supplier')); $files = array(); for ($i = 0; $i < 3; $i++) { if (file_exists(_PS_SUPP_IMG_DIR_ . (int) $supplier->id . '-' . $i . '_thumb.jpg')) { $files[$i]['type'] = HelperImageUploader::TYPE_IMAGE; $files[$i]['image'] = ImageManager::thumbnail(_PS_SUPP_IMG_DIR_ . (int) $supplier->id . '-' . $i . '_thumb.jpg', $this->context->controller->table . '_' . (int) $supplier->id . '-' . $i . '_thumb.jpg', 100, 'jpg', true, true); $files[$i]['delete_url'] = Context::getContext()->link->getAdminLink('AdminBlockCategories') . '&deleteThumb=' . $i . '&id_supplier=' . (int) $supplier->id; } } $helper = new HelperImageUploader(); $helper->setMultiple(true)->setUseAjax(true)->setName('thumbnail')->setFiles($files)->setMaxFiles(3)->setUrl( Context::getContext()->link->getAdminLink('AdminBlockCategories') . '&ajax=1&id_supplier=' . $supplier->id . '&action=uploadThumbnailImages'); $this->smarty->assign('helper', $helper->render()); return $this->display(_PS_MODULE_DIR_ . '/blocksupplier/blocksupplier.php', 'views/blocksupplier_admin.tpl'); } } else { return false; } } } But doesn't work. I know that the hook is been firing, but the admin panel doesn't change. What i'm missing? Any help will be very welcome!
  3. Hello, i'm trying to add a field to suppliers, and let edit from admin panel. The field is a list of categories. I created a new AdminSuppliersController in 'override' folder. Overrided the function renderForm so now shows categories in a list of checkboxes. public function renderForm() { /*NOT MODIFIED FROM ORIGINAL FUNCTION*/ //Categories $cat_opts = array(); foreach (Category::getChildren((int) Category::getRootCategory()->id, Context::getContext()->language->id) as $category) { $cat_opts[] = array( 'id' => (int) $category['id_category'], 'name' => $category['name'], 'val' => (int) $category['id_category'] ); } $this->fields_form = array( /*NOT MODIFIED FROM ORIGINAL FUNCTION*/ array( 'type' => 'checkbox', 'label' => $this->l('Categories'), 'name' => 'categories', 'values' => array( 'query' => $cat_opts, 'id' => 'id', 'name' => 'name' ) ), /*NOT MODIFIED FROM ORIGINAL FUNCTION*/ } I've overrided the Supplier class to add a new field. class Supplier extends SupplierCore { public $categories; public function __construct($id = null, $id_lang = null) { self::$definition['fields']['categories'] = array( 'type' => self::TYPE_STRING, 'validate' => 'isGenericName'); parent::__construct($id, $id_lang); } } But i can't imagine how to get and save the value of the checkboxes. Anyone could help?
  4. Hello everyone, I'm having a really strange error trying to create a new CMS page. Whenever I try to create a new CMS page, I get a warning from Prestshop itself, saying Invalid Security Token. If I click on the first option, I get on the admin home page, and if I click on the second option, I get on "CMS pages" page again, without having any option to create one. Anyone know what is possibly going on? Thanks in advance
×
×
  • Create New...