-
Публікації
1 750 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Повідомлення, опубліковані користувачем halfhope
-
-
Здравствуйте!
Помогите плиз. У меня остор 1.5.5. Скачал vqmod 2.4. Залил все куда нужно. Перешел по адресу инсталл и увидел, что все норм установилось.
Закинул в папку product файл product2.tpl
Далее зашел в сам модуль. Тип шаблона: шаблон товаров Прописал: template/product/product2.tpl
А как связать конкретный товар с шаблоном product2.tpl? Добавил схему "Продукт 2". В ней прописал product/product2. При добавлении нового товара выбрал в "дизайне" пункт "Продукт 2".
Но ничего не поменялось. В самом файле product2.tpl я все поудалял (картинку цену, описание). Т.е. должен был получить пустую страницу с тайтлом.... Но нет - все по-прежнему. (((
Не нужно добавлять схему, создайте модуль, выберите тип "Шаблон для товаров", в нем укажите шаблон template/product/product2.tpl и выберите товары на которые хотите назначить шаблон. Все.
-
-
Консоль браузера откройте, там будет написано почему не загружаются стили/скрипты!!!!
-
А вот как сделать так чтобы передавать значения в базу никак понять не могу. Я так понимаю что из формы tpl надо передать сонтролер а из него уже в модель к определенной функции.
Может подскажите как это делается??
Сори за глупый вопрос и не ругайте меня плз ))
Так же. Создается переменная $action, которая содержит путь к контроллеру. В контроллере должна стоять проверка метода HTTP запроса, если это POST, то загружаем модель и передаем POST данные в функцию модели. Ваше сообщение сразу не заметил, т.к. уведомления при упоминании никнейма не приходят, а только при цитировании или если я подписан на эту тему/создал ее.
-
-
halfhope, Не могли бы вы мне все таки подсказать, каким образом вывести изображения в featured.tpl? :oops:
Не как не могу понять каким образом вывести изображения из массива.. :cry:
Выводится так же как и цена. Только еще один массив. Используйте функцию var_dump, чтобы просмотреть одержимое массива и названия переменных/индексы.
-
Вообще-то у PhpBB предусмотрена возможность отдавать аутентификацию на сторону, другому приложению (в нашем случае Opencart-у) https://wiki.phpbb.com/Authentication_plugins
Это понятно, с авторизацией разобрался вдоль и поперек. Мне нужна эмуляция прав phpbb, пользователей, сессий и т.д., чтобы получать список постов и т.д. это можно сделать только получив доступ к классам phpbb, что я и пытался сделать.
-
-
В PHP когда классы одинаковые (имена классов) ничего не сделаешь
Можно сушить весла или клепать костыли
Спасибо. Понимал в душе, что до практики дело не дойдет, только теория. Подожду еще мнений, а пока в лодке посижу)
-
Всем доброго времени суток.
Прошу о помощи. Решил сделать набор модулей для интеграции phpbb в OpenCart . Началось все с того, что возникла необходимость объединить регистрацию/авторизацию на PHPBB и OpenCart, но как оказалось простого добавления записей В БД было мало, загорелся и захотел написать еще пару модулей для интеграции phpbb в OpenCart (не наоборот).
Вот тут-то и возникла первая проблема. Я, конечно, могу выполнять запросы напрямую к БД и выдергивать нужные данные, но это не то. Нужно, чтобы скрипт имел доступ ко всем классам и выполнялся в контексте движка, дабы использовать все возможности phpbb.
Тут видел 2 варианта - создать дубликаты незаменимых классов phpbb и использовать их в OpenCart, либо запустить phpbb в контексте OpenCart и получать данные напрямую у phpbb. Первый вариант отпал сразу как я увидел внутренности в phpbb, мне бы пришлось создавать дубликаты классов почти всего движка. С вторым вариантом мне помогли (спасибо rxu):
define('IN_PHPBB', true); $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : 'd:/php/home/phpbb.im/forum/'; $phpEx = substr(strrchr(__FILE__, '.'), 1); include($phpbb_root_path . 'common.' . $phpEx); include($phpbb_root_path . 'includes/functions_display.' . $phpEx); include($phpbb_root_path . 'includes/functions_url_matcher.' . $phpEx); // Start session management $user->session_begin(); $auth->acl($user->data); $user->setup('viewforum'); var_dump($user); //проверено, работает, выводит то что нужно
Этот код (аналог index.php в OpenCart) инициализирует phpbb и все классы, которые понадобятся для его полноценной работы -> для получения данных из классов phpbb. Т.е. после инициализации в контроллере модуля можно было бы в написать:
$this->data['username'] = $user->data['username'];
Но проблема в том, что инициализация phpbb выполняется в контексте (в контроллере) OpenCart и как следствие - ошибки из-за одинаковых названий классов - request, cache и т.д. в этот список входят все основные классы OpenCart.
Нашел статью по пространствам имен в PHP, но там:
В PHP нельзя импортировать сразу несколько классов из-за особенности работы языка. Если Java может легко узнать какие классы находятся в пакете (namespace), то PHP так не может, там все динамически и заранее какие классы находятся в namespace'e узнать невозможно. Да и namespace в PHP это как макросы, все названия классов раскрываются на этапе трансляции в байткод, а не во время выполнения.
Что можно сделать в такой ситуации? Можно, конечно, написать свой мод для phpbb и запилить JSON API, но это не вариант.
-
-
В seo_pro, в самом начале, конструкторе __construct получите этот код. Далее, в функции rewrite найдите код:
if (isset($tmp['tracking'])) { $data['tracking'] = $tmp['tracking']; }
После него добавьте:
if (isset($this->data['code'])) { $data['code'] = $this->data['code']; }
Должно работать. Еще вам будет нужно проверить партнер это или нет, т.к. seo_pro генерирует ссылки для всех независимо от того партнер это или нет.
-
Никак, все классы (библиотеки), расположенные в system/library/ загружаются до инициализации моделей. К тому же они просто инклудятся, так что поймать контекст OpenCat будет сложно. А какая у вас задача? Если изменить или добавить url, то это нужно делать в catalog/controller/common/seo_pro.php или seo_url.php.
-
Где именно видите ссылки? в индексе поисковиков или в логах апача?
-
UPD Боже мой, походу я так давно не спал. Вы все правильно подумали и правильно сделали с model/module/my_box.php. Я же как-то пропустил мимо глаз весь текст . Подумал, что нужно создать обычный модуль OpenCart, для которого не используется модель. Ну раз уж я написал я отправлю:
В OpenCart (в админке) у модуля есть всего 2 файла - файл контроллера и файл шаблона причем создание и редактирование происходит тоже с помощью них.
Контроллер как мы уже знаем, обрабатывает инфу из моделей и передает/выводит в шаблон. Контроллер модуля админки должен:
- сохранить настройки
- получить данные для модуля, чтобы потом передать их в view (при редактировании)
- сгенерировать данные "по умолчанию" (при создании нового модуля)
Все это делается в одной функции index используя встроенные модели.
1. Для сохранения данных используется вот такой стандартный код (на примере модуля my_box):
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { if (!isset($this->request->get['module_id'])) { $this->model_extension_module->addModule('my_box', $this->request->post); } else { $this->model_extension_module->editModule($this->request->get['module_id'], $this->request->post); } $this->session->data['success'] = $this->language->get('text_success'); $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); }
При отправке формы на этот же адрес он создаст новый модуль или отредактирует существующий, если передан module_id
2, 3. Получение данных модуля(редактирование) и установка данных "по умолчанию", если данные модуля не были получены(создание нового).
Создание нового модуля и редактирование отличается лишь тем, что в при редактировании в адресной строке передается module_id. Если module_id объявлен, то идет получение данных модуля с этим module_id. И в шаблон передаются данные модуля для формы. Если не объявлен, то ставим данные по умолчанию вместо данных модуля. Это все можно сделать вот так:
// Проверка module_id и получение данных модуля if (isset($this->request->get['module_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) { $module_info = $this->model_extension_module->getModule($this->request->get['module_id']); } // Проверка данных для кадого поля формы if (isset($this->request->post['name'])) { $data['name'] = $this->request->post['name']; //В случае ошибки (если они у вас обрабатываются в функции validate) ставим в форму данные, которые отправили, чтобы их не потерять } elseif (!empty($module_info)) { $data['name'] = $module_info['name']; //Если данные модуля получены, то ставим их } else { $data['name'] = ''; //Если не получены, то ставим данные по умолчанию }
Надеюсь понятно объяснил.
Создайте модель model/module/my_box.php, обычно туда все модели для модулей кладем. Потом можно будет загрузить:
$this->load->model('module/my_box');
- 1
-
Никто не судит) Нет, все не так. Сейчас попытаюсь объяснить.
-
Здравствуйте!
Я чайник в программированиях. Только начинаю разбираться в теме сжатия. Хочу разобраться с вашим модулем.
Вот пара вопросов возникла - не могу понять. Может подскажете.
1. Смотрел рекомендуемый вами файл .htaccess. Меня смущает вот что: там заказывается сжатие с помощью mod_gzip.c и сжатие с с помощью mod_deflate.c. Это как? Сжать сначала одним упаковщиком, а потом вторым? В инетах пишут, что это вроде два равноценных модуля и следует использовать какой-то один. А рекомендуют использовать mod_deflate.c мотивируя это тем, что он входит в стандарный пакет Апача, а mod_gzip.c это сторонний модуль от стороннего производителя. Ну еще, что он какое-то время уже не обновляется и типа документации по нему мало.
2. если на сайте уже включено сжатие css и js файлов:
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
то зачем еще использование вашего модуля? Сжимать еще раз уже сжатое вышеуказанными модулями? Или ваш модуль - это альтернатива вышеперечисленным модулям?
1. Нет, будет выбран только один минимизатор, не знаю какому апач отдает приоритет. Рекомендую deflate, т.к. gzip это инструмент, который содержит deflate. Deflate в свою очередь включен в apache по умолчанию. Но разница в выигрыше видна только на слабых машинах.
2. Стоит понимать разницу между Gzip сжатием и минимизацией. Модуль именно минимизирует CSS/JS файлы, т.е. убирает пробелы, переносы, лишние символы (зависит от выбранного минимизатора). А Gzip/deflate сжимает алгоритмом deflate. Вот в чем разница.
Рекомендую к прочтению:
-
В модулях используется коробочная модель extension/module. Смотрите модуль HTML, он маленький и там все понятно.
-
Получаем изображения, обрабатываем и добавляем в массив:
if ($product_info) { $additional_images = array(); $additional_images_query = $this->model_catalog_product->getProductImages($this->request->get['product_id']); foreach ($additional_images_query as $result) { $additional_images[] = array( 'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')), 'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height')) ); }
Затем нужно "прицепить" массив к массиву с товарами:
$data['products'][] = array( //$this->data для 1.5.x 'product_id' => $product_info['product_id'], 'thumb' => $image, 'images' => $additional_images, //"Прицепили" 'name' => $product_info['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) );
Вот и все.
-
Цитата с публикации. Хочется добавить разработчикам, что при переводе нашел недоработанный раздел. Называется он “design/custom_field”, который позволяет настраивать (добавлять) произвольные поля на некоторых страницах магазина.
Для того, чтобы этот компонент появился в меню необходимо в файле “admin/view/template/common/header.tpl” после строки:
<li><a href="<?php echo $banner; ?>"><?php echo $text_banner; ?></a></li>
добавить
<li><a href="<?php echo $custom_field; ?>"><?php echo $text_custom_field; ?></a></li>
Так же при открытии раздела выскакивает сообщение от Дэниэла Керра (разработчика OpenCart). Чтобы его отключить необходимо в файле “admin/view/template/design/custom_field_form.tpl” удалить 199 строку.
-
-
-
Спасибо, помогли и с этим.
А как можно оптимизировать изображения? (о чём говорит PageSpeed Insights)
Надо другую библиотеку использовать для сжатия?
Теперь единственное что осталось возможным исправить: так это уменьшить время генерации страницы(у меня 0,26сек)
Вам бы это в модуль добавить и вообще можно дорого продавать. Вы очень низкую цену за такую работу и поддержку поставили.
Но тут я сам уже решение нашёл
Так как создание изображений на сервере происходит с помощью сторонней программы их можно оптимизировать только с помощью сторонних программ (вариант для windows), иначе никак. Если есть root доступ к серверу, то можно сделать все что угодно. 0.26 секунд это очень хороший результат, мало у кого он есть, если хотите продолжить, то модули тут е помогут, либо кэширование на стороне сервера, либо проведите профилирование кода, чтобы выявить узкие места.
Тут Вам MCJ уже не поможет)
-
Шикарный хак. Спасибо, не знал, что так можно было)
total commander теряет соединение с ftp
в Курилка
Опубліковано:
Еще может быть установлен лимит по времени, когда соединение открыто. Для того чтобы его обойти на вкладке "Расширенные" поставьте отправку команды NOOP (или любой другой) каждую минуту.