spirit_infernal Posted January 6, 2018 Share Posted January 6, 2018 Всем привет. Есть модуль Pos Category Slider, поставляемый вместе с темой. По дефолту в админке есть следующие органы управления: выпадающее меню, которое даёт выбрать категорию из которой выбираются товары и поле для загрузки картинки-баннера, которая отображается сбоку от слайдера и ведёт на ту же категорию, что и товары. Нужно: добавить возможность для баннера задавать любую ссылку из поля ввода. Что я уже сделал: добавил поле ввода и прописал функцию сохранения значения и возврат значения после обновления страницы при сохранении настроек. и застрял на том, как получить значение в фронт-офисе. вожусь с этим вопросом уже несколько дней, хотел бы попросить помощи у более подкованных людей. заранее благодарен. код модуля ниже // хук для вывода public function hookDisplayHome($params) { $arrayCategory = array(); $id_category = Configuration::get($this->name . '_list_cate'); //echo $id_category; die; $id_lang = (int)Context::getContext()->language->id; $id_shop = (int)Context::getContext()->shop->id; $categoryParent = new Category((int)$id_category, (int)$id_lang, (int)$id_shop); $category_name = $categoryParent->name; $category_link_rewrite = $categoryParent->link_rewrite; $category_id = $categoryParent->id_category; $arrayProductCate = array(); $cateArray = Category::getChildren((int)$id_category, (int)$id_lang, true, (int)$id_shop); //print_r() $cate_image_link_1 = Configuration::get('cate_image_link_1'); if ($cateArray) { $subcategories = array(); foreach ($cateArray as $subcategory) { $category = new Category((int)$subcategory['id_category'], (int)$id_lang, (int)$id_shop); $subcategories[] = array('id' => $subcategory['id_category'], 'name' => $category->name); } //print_r($subcategories);die; $cate_image_name_1 = 'cate_image_1_' . $id_shop; $this->context->smarty->assign('category_name', $category_name); $this->smarty->assign(array( 'category_link_rewrite' => $category_link_rewrite, 'subcategories' => $subcategories )); } //echo '<pre>'; print_r($cateArray1);die; $arrayProductCate = array(); $manufacturer = array(); $category = new Category((int)$id_category, (int)$id_lang, (int)$id_shop); $categoryProducts = $category->getProducts($this->context->language->id, 0, 15, 'date_add', 'DESC'); $arrayProductCate['products'] = array('id' => $id_category, 'name' => $category->name, 'product' => $categoryProducts); foreach ($categoryProducts as $product) { if (!in_array($product['id_manufacturer'], $manufacturer)) { $manufacturer[] = $product['id_manufacturer']; } } foreach ($arrayProductCate['products']['product'] as &$item) { $dbQuery = Db::getInstance(); $result = $dbQuery->query('SELECT free_shipping FROM ' . _DB_PREFIX_ . 'product_lang WHERE id_product = ' . $item['id_product']); $item['free_shipping'] = $result->fetch(PDO::FETCH_ASSOC)['free_shipping']; } unset($item); //echo '<pre>'; print_r($manufacturer);die; $cate_image_name_1 = 'cate_image_1_' . $id_shop; $cate_image_link_1 = Configuration::get('cate_image_link_1'); $this->context->smarty->assign('category_name', $category->name); //echo '<pre>'; print_r($arrayProductCate);die; $this->smarty->assign(array( 'manufacturers' => $manufacturer, 'category_id' => $category_id, 'productCates' => $arrayProductCate, 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'cate_image_1' => _PS_BASE_URL_ . __PS_BASE_URI__ . 'modules/' . $this->name . '/img/' . $cate_image_name_1 . '.' . Configuration::get('CATE_IMG_EXT'), 'cate_image_link_1' => $cate_image_link_1 )); return $this->display(__FILE__, 'poscategorylist1.tpl'); } // получение контента public function getContent() { $output = '<h2>' . $this->displayName . '</h2>'; if (Tools::isSubmit('submitPosTabCate')) { if (!sizeof($this->_postErrors)) $this->_postProcess(); else { foreach ($this->_postErrors AS $err) { $this->_html .= '<div class="alert error">' . $err . '</div>'; } } } return $output . $this->_displayForm(); } // постобработка private function _postProcess() { Configuration::updateValue($this->name . '_list_cate', Tools::getValue('list_cate')); $cate_image_link_1 = Configuration::updateValue('cate_image_link_1'); $id_shop = (int)Context::getContext()->shop->id; if (Tools::isSubmit('submitPosTabCate')) { if (isset($_FILES['p_image_1']) && isset($_FILES['p_image_1']['tmp_name']) && !empty($_FILES['p_image_1']['tmp_name'])) { Configuration::updateValue('CATE_IMG_EXT', substr($_FILES['p_image_1']['name'], strrpos($_FILES['p_image_1']['name'], '.') + 1)); $cate_image_name = 'cate_image_1_' . $id_shop; if ($error = ImageManager::validateUpload($_FILES['p_image_1'], Tools::convertBytes(ini_get('upload_max_filesize')))) $errors .= $error; else { // Copy the image in the module directory with its new name if (!move_uploaded_file($_FILES['p_image_1']['tmp_name'], _PS_MODULE_DIR_ . $this->name . '/img/' . $cate_image_name . '.' . Configuration::get('CATE_IMG_EXT'))) $errors .= $this->l('File upload error.'); } } $cate_image_link_1 = Tools::getValue('cate_image_link_1'); } $this->_html .= '<div class="conf confirm">' . $this->l('Settings updated') . '</div>'; } // вывод формы настроек private function _displayForm() { $spacer = str_repeat(' ', $this->spacer_size); $id_shop = (int)Context::getContext()->shop->id; $this->_html .= ' <form action="' . $_SERVER['REQUEST_URI'] . '" method="post" enctype="multipart/form-data"> <fieldset> <legend><img src="../img/admin/cog.gif" alt="" class="middle" />' . $this->l('Settings') . '</legend>'; // тут подгружается картинка $cate_image_name_1 = 'cate_image_1_' . $id_shop; $this->_html .= ' <label>' . $this->l('Image 1: ') . '</label> <div class="margin-form"> <img class="img-responsive" src="' . _PS_BASE_URL_ . __PS_BASE_URI__ . 'modules/' . $this->name . '/img/' . $cate_image_name_1 . '.' . Configuration::get('CATE_IMG_EXT') . '" /> </br> <input id="p_image_1" type="file" name="p_image_1" class="hide"> </div>'; //тут по-идее указывается ссылка $this->_html .='<div class="margin-form"> <input id="cate_image_link_1" type="text" name="cate_image_link_1" value="'.Tools::getValue('cate_image_link_1').'"/> </div>'; $this->_html .= '<label>' . $this->l('Show Link/Label Category: ') . '</label>'; $this->_html .= '<div class="margin-form">'; $this->_html .= '<select name ="list_cate">'; // BEGIN Categories $id_lang = (int)Context::getContext()->language->id; $this->getCategoryOption(1, (int)$id_lang, (int)Shop::getContextShopID()); $this->_html .= '</select> </div>'; $this->_html .= ' <input type="submit" name="submitPosTabCate" value="' . $this->l('Update') . '" class="button" /> </fieldset> </form>'; return $this->_html; } // выборка категорий private function getCategoryOption($id_category = 1, $id_lang = false, $id_shop = false, $recursive = true) { $cateCurrent = Configuration::get($this->name . '_list_cate'); $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id; $category = new Category((int)$id_category, (int)$id_lang, (int)$id_shop); if (is_null($category->id)) return; if ($recursive) { $children = Category::getChildren((int)$id_category, (int)$id_lang, true, (int)$id_shop); $spacer = str_repeat(' ', $this->spacer_size * (int)$category->level_depth); } if ($category->level_depth > 3) return; $shop = (object)Shop::getShop((int)$category->getShopID()); if ((int)$category->id == (int)$cateCurrent) { $this->_html .= '<option value="' . (int)$category->id . '" selected ="selected" >' . (isset($spacer) ? $spacer : '') . $category->name . ' (' . $shop->name . ')</option>'; } else { $this->_html .= '<option value="' . (int)$category->id . '">' . (isset($spacer) ? $spacer : '') . $category->name . ' (' . $shop->name . ')</option>'; } if (isset($children) && count($children)) foreach ($children as $child) $this->getCategoryOption((int)$child['id_category'], (int)$id_lang, (int)$child['id_shop']); } часть кода шаблона, куда всё выводится: <div class="col-xs-12 col-sm-4 col-md-3"> {if isset($cate_image_1) && $cate_image_1 != null} <div class="image_block"> <a href="{$cate_image_link_1}"> <img src={$cate_image_1} alt="category image" class="img-responsive"/> </a> </div> {/if} </div> Link to comment Share on other sites More sharing options...
savvato Posted January 6, 2018 Share Posted January 6, 2018 Этод метод отвечает за передачу переменных во фронт в смарти $this->context->smarty->assign передайте нужные Вам переменные в нем. 1 Link to comment Share on other sites More sharing options...
savvato Posted January 6, 2018 Share Posted January 6, 2018 после изменений не забывайте чистить кеш смарти, а также не забудьте, что шаблон модуля может лежать в папке с темой. Поэтому Ваши изменения могут не работать. 1 Link to comment Share on other sites More sharing options...
spirit_infernal Posted January 6, 2018 Author Share Posted January 6, 2018 спасибо за подсказку. про шаблон модуля я момент учёл, и код представленный выше как раз из папки темы. но вот у меня вопрос, а разве в этой части из приведенного выше переменная не назначается? $this->smarty->assign(array( 'manufacturers' => $manufacturer, 'category_id' => $category_id, 'productCates' => $arrayProductCate, 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'cate_image_1' => _PS_BASE_URL_ . __PS_BASE_URI__ . 'modules/' . $this->name . '/img/' . $cate_image_name_1 . '.' . Configuration::get('CATE_IMG_EXT'), 'cate_image_link_1' => $cate_image_link_1 )); в последней строке? если назначается, то получается, что где-то я переменную передаю не верно. поиск по бд магазина производил, эта переменная пустая. Link to comment Share on other sites More sharing options...
spirit_infernal Posted January 6, 2018 Author Share Posted January 6, 2018 спасибо ещё раз, всё получилось) передавал так: public function hookDisplayHome($params) { // исходный код из примера в начанлом сообщении $this->smarty->assign(array( 'manufacturers' => $manufacturer, 'category_id' => $category_id, 'productCates' => $arrayProductCate, 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'cate_image_1' => _PS_BASE_URL_ . __PS_BASE_URI__ . 'modules/' . $this->name . '/img/' . $cate_image_name_1 . '.' . Configuration::get('CATE_IMG_EXT') )); // передача инпута в фронт тут $cate_image_link_1 = Configuration::get('cate_image_link_1'); $this->context->smarty->assign('cate_image_link_1', $cate_image_link_1); return $this->display(__FILE__, 'poscategorylist1.tpl'); } на случай, если кто искать будет. 1 Link to comment Share on other sites More sharing options...
spirit_infernal Posted January 18, 2018 Author Share Posted January 18, 2018 а вот при задвоении полей ввода и картинок ловится глюк - картинки по одной не заменяются, так же как и контент в полях ввода. хотя вроде всё было сделано корректно, все нужные данные изменены. Кто может подсказать, в чём там может быть проблема? 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