spirit_infernal Posted January 6, 2018 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> Share this post Link to post Share on other sites More sharing options...
savvato Posted January 6, 2018 Posted January 6, 2018 Этод метод отвечает за передачу переменных во фронт в смарти $this->context->smarty->assign передайте нужные Вам переменные в нем. 1 Share this post Link to post Share on other sites More sharing options...
savvato Posted January 6, 2018 Posted January 6, 2018 после изменений не забывайте чистить кеш смарти, а также не забудьте, что шаблон модуля может лежать в папке с темой. Поэтому Ваши изменения могут не работать. 1 Share this post Link to post Share on other sites More sharing options...
spirit_infernal Posted January 6, 2018 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 )); в последней строке? если назначается, то получается, что где-то я переменную передаю не верно. поиск по бд магазина производил, эта переменная пустая. Share this post Link to post Share on other sites More sharing options...
spirit_infernal Posted January 6, 2018 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 Share this post Link to post Share on other sites More sharing options...
spirit_infernal Posted January 18, 2018 Posted January 18, 2018 а вот при задвоении полей ввода и картинок ловится глюк - картинки по одной не заменяются, так же как и контент в полях ввода. хотя вроде всё было сделано корректно, все нужные данные изменены. Кто может подсказать, в чём там может быть проблема? Share this post Link to post 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