Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

halfhope

Користувачі
  
  • Публікації

    1 750
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем halfhope

  1. Здравствуйте!

     

    Помогите плиз. У меня остор 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 и выберите товары на которые хотите назначить шаблон. Все.

  2. А вот как сделать так чтобы передавать значения в базу никак понять не могу. Я так понимаю что из формы tpl надо передать  сонтролер а из него уже в модель к определенной функции.

    Может подскажите как это делается??

    Сори за глупый вопрос и не ругайте меня плз ))

     

    Так же. Создается переменная $action, которая содержит путь к контроллеру. В контроллере должна стоять проверка метода HTTP запроса, если это POST, то загружаем модель и передаем POST данные в функцию модели. Ваше сообщение сразу не заметил, т.к. уведомления при упоминании никнейма не приходят, а только при цитировании или если я подписан на эту тему/создал ее.

  3. halfhope, Не могли бы вы мне все таки подсказать, каким образом вывести изображения в featured.tpl? :oops:

    Не как не могу понять каким образом вывести изображения из массива.. :cry:

     

    Выводится так же как и цена. Только еще один массив. Используйте функцию var_dump, чтобы просмотреть одержимое массива и названия переменных/индексы.

  4. Вообще-то у PhpBB предусмотрена возможность отдавать аутентификацию на сторону, другому приложению (в нашем случае Opencart-у) https://wiki.phpbb.com/Authentication_plugins

     

    Это понятно, с авторизацией разобрался вдоль и поперек. Мне нужна эмуляция прав phpbb, пользователей, сессий и т.д., чтобы получать список постов и т.д. это можно сделать только получив доступ к классам phpbb, что я и пытался сделать.

  5. В PHP когда классы одинаковые (имена классов) ничего не сделаешь

    Можно сушить весла или клепать костыли

     

    Спасибо. Понимал в душе, что до практики дело не дойдет, только теория. Подожду еще мнений, а пока в лодке посижу)

  6. Всем доброго времени суток.

     

    Прошу о помощи. Решил сделать набор модулей для интеграции 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, но это не вариант. 

  7. В seo_pro, в самом начале, конструкторе __construct получите этот код. Далее, в функции rewrite найдите код:

    if (isset($tmp['tracking'])) {
    	$data['tracking'] = $tmp['tracking'];
    }
    

    После него добавьте:

    if (isset($this->data['code'])) {
    	$data['code'] = $this->data['code'];
    }
    

    Должно работать. Еще вам будет нужно проверить партнер это или нет, т.к. seo_pro генерирует ссылки для всех независимо от того партнер это или нет.

  8. Никак, все классы (библиотеки), расположенные в system/library/ загружаются до инициализации моделей. К тому же они просто инклудятся, так что поймать контекст OpenCat будет сложно. А какая у вас задача? Если изменить или добавить url, то это нужно делать в catalog/controller/common/seo_pro.php или seo_url.php. 

  9. UPD Боже мой, походу я так давно не спал. Вы все правильно подумали и правильно сделали с model/module/my_box.php. Я же как-то пропустил мимо глаз весь текст . Подумал, что нужно создать обычный модуль OpenCart, для которого не используется модель. Ну раз уж я написал я отправлю:

     

    В OpenCart (в админке) у модуля есть всего 2 файла - файл контроллера и файл шаблона причем создание и редактирование происходит тоже с помощью них.

     

    Контроллер как мы уже знаем, обрабатывает инфу из моделей и передает/выводит в шаблон. Контроллер модуля админки должен:

    1. сохранить настройки 
    2. получить данные для модуля, чтобы потом передать их в view (при редактировании)
    3. сгенерировать данные "по умолчанию" (при создании нового модуля)

    Все это делается в одной функции 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
  10. Здравствуйте!

    Я чайник в программированиях. Только начинаю разбираться в теме сжатия. Хочу разобраться с вашим модулем.

    Вот пара вопросов возникла - не могу понять. Может подскажете.

     

    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. Вот в чем разница.

     

    Рекомендую к прочтению:

  11. Получаем изображения, обрабатываем и добавляем в массив:

    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'])
    );
    
    

    Вот и все.

  12. Цитата с публикации. Хочется добавить разработчикам, что при переводе нашел недоработанный раздел. Называется он “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 строку.

  13. Спасибо, помогли и с этим.

    А как можно оптимизировать изображения? (о чём говорит PageSpeed Insights)

    Надо другую библиотеку использовать для сжатия?

     

    Теперь единственное что осталось возможным исправить: так это уменьшить время генерации страницы(у меня 0,26сек)

    Вам бы это в модуль добавить и вообще можно дорого продавать. Вы очень низкую цену за такую работу и поддержку поставили.

    Но тут я сам уже решение нашёл

     

    Так как создание изображений на сервере происходит с помощью сторонней программы их можно оптимизировать только с помощью сторонних программ (вариант для windows), иначе никак. Если есть root доступ к серверу, то можно сделать все что угодно. 0.26 секунд это очень хороший результат, мало у кого он есть, если хотите продолжить, то модули тут е помогут, либо кэширование на стороне сервера, либо проведите профилирование кода, чтобы выявить узкие места. 

     

    Тут Вам MCJ уже не поможет)

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.