berrber
-
Публікації
265 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Повідомлення, опубліковані користувачем berrber
-
-
Как вы заметили ранее это не эффективный метод, тем не менее его наличие позволяет в некоторых случаях сэкономить на getimagesize.
Интересует что вы хотели сказать этимpublic function resize($width = 0, $height = 0, $default = '') { if (!$this->width || !$this->height) { return; } ... if ($scale == 1 && $scale_h == $scale_w && $this->mime != 'image/png') { return; }
-
Т е без ресайза ЗАГРУЖЕННОЙ бомбы
Не понял смысл.
Как писал ранее preg_match не ключевой метод проверки.
Изображение модифицируется изменением размера, что позволяет думать о полном удалении присутствующего в нем скрипта.
Опубликуйте источники откуда цитаты брали.
-
Ключевые методы:preg_match - тоже можно обойти
2. @getimagesize($this->request->files['files']['tmp_name'][$key]) == FALSE
4. $file = $upload_dir . md5(mt_rand()) . basename($file_usr_name);
5. $image->resize($width, $height);
?<img src="<?php echo $arbitrage['image']; ?>"
Надеюсь вы не об этом, т.к. там resize не для безопасностиИ посмотрите класс Image, условие при котором не происходит ресайз ;)
if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $image_width, $image_height); } else { $image = ''; }
Если вы об этом$image->resize($width, $height);
То о каком условии речь? -
Код "private function upload", "/catalog/controller/information/arbitrage.php"
private function upload($upload_dir) { $upload_file = true; $uploaded_files = array(); $files_unlink = array(); foreach ($this->request->files['files']['name'] as $key => $file_name) { $file_usr_name = basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/', '', html_entity_decode($file_name, ENT_QUOTES, 'UTF-8'))); if (is_uploaded_file($this->request->files['files']['tmp_name'][$key]) && file_exists($this->request->files['files']['tmp_name'][$key])) { $file = $upload_dir . md5(mt_rand()) . basename($file_usr_name); $uploaded_files[] = $file; $file = DIR_IMAGE . $file; $files_unlink[] = $file; if (@move_uploaded_file($this->request->files['files']['tmp_name'][$key], $file)) { $settings = $this->config->get('arbitrage_description'); $image = new Image($file); if ($key) { $width = $settings['image_popup']['width'] ? $settings['image_popup']['width'] : 800; $height = $settings['image_popup']['height'] ? $settings['image_popup']['height'] : 600; } else { $width = $settings['dimension']['width'] ? $settings['dimension']['width'] : 50; $height = $settings['dimension']['height'] ? $settings['dimension']['height'] : 50; } $image->resize($width, $height); $image->save($file); } else { $upload_file = false; $this->error['upload_file'][$key] = $this->language->get('error_upload'); } } } if (!$upload_file) { foreach ($files_unlink as $uploaded_file) { unlink($uploaded_file); } } return $uploaded_files; }
Код "protected function validate() {", "/catalog/controller/information/arbitrage.php"protected function validate() { $this->language->load('information/arbitrage'); if ($this->request->server['REQUEST_METHOD'] == 'POST') { if ((utf8_strlen($this->request->post['author']) < 3) || (utf8_strlen($this->request->post['author']) > 25)) { $this->error['author'] = $this->language->get('error_author'); } if ((utf8_strlen($this->request->post['description']) < 25) || (utf8_strlen($this->request->post['description']) > 3000)) { $this->error['description'] = $this->language->get('error_description'); } if (empty($this->request->post['rating'])) { $this->error['rating'] = $this->language->get('error_rating'); } if (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) { $this->error['captcha'] = $this->language->get('error_captcha'); } } foreach ($this->request->files['files']['name'] as $key => $file_name) { if (!empty($this->request->files['files']['name'][$key])) { $settings = $this->config->get('arbitrage_description'); $file_usr_name = basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/', '', html_entity_decode($file_name, ENT_QUOTES, 'UTF-8'))); // Allowed file extension types $allowed = array(); $filetypes = explode(',', $settings['upload_allowed']); foreach ($filetypes as $filetype) { $allowed[] = trim($filetype); } $content = file_get_contents($this->request->files['files']['tmp_name'][$key]); if ($key) { $size = $settings['attached_size'] ? $settings['attached_size'] : 100; } else { $size = $settings['photo_size'] ? $settings['photo_size'] : 1000; } if (preg_match('/\<\?php/i', $content)) { $this->error['upload_file'][$key] = $this->language->get('error_filetype'); } elseif (!in_array(substr(strrchr($file_usr_name, '.'), 1), $allowed)) { $this->error['upload_file'][$key] = $this->language->get('error_filetype'); } elseif ((utf8_strlen($file_usr_name) < 1) || (utf8_strlen($file_usr_name) > 255)) { $this->error['upload_file'][$key] = $this->language->get('error_filename'); } elseif (($this->request->files['files']['size'][$key] / 1000) > $size) { $this->error['upload_file'][$key] = sprintf($this->language->get('error_filesize'), $size); } elseif ($this->request->files['files']['error'][$key] != UPLOAD_ERR_OK) { $this->error['upload_file'][$key] = $this->language->get('error_upload'); } elseif (@getimagesize($this->request->files['files']['tmp_name'][$key]) == FALSE) { $this->error['upload_file'][$key] = $this->language->get('error_upload'); } elseif ($this->error) { $this->error['upload_file'][$key] = $this->language->get('error_upload'); } } else { $this->error['upload_file'][$key] = $this->language->get('error_select_file'); } } if (!$this->error) { return true; } else { return false; } }
1. $this->request->files['files']['error'][$key] != UPLOAD_ERR_OK
2. @getimagesize($this->request->files['files']['tmp_name'][$key]) == FALSE
3. preg_match('/\<\?php/i', $content)
4. $file = $upload_dir . md5(mt_rand()) . basename($file_usr_name);
5. $image->resize($width, $height);6. прошлая беседа, на ту же тему, с вами Отзывы покупателей о магазине (отдельная страница)
-
Отзывы с изображениями
Описание:
Создание отзывов о магазине на отдельной странице, с возможностью размещения отзывов в отдельном модуле.
Отзывы добавляют клиенты магазина, заполняя форму. Можно прикрепить изображения.
Отзыв, заполненный клиентом, по-умолчанию отключен, для публикации требуется включить его в панели управления магазином.
Отзывы публикуются от нового к старым, по дате публикации.
Настройки/возможности:
1. Администратор магазина может редактировать, удалять, создавать отзыв.
2. Мультиязык.
3. Нет поддержки мульти-магазина.
4. Общие настройки модуля:
- оповещать о новом отзыве по e-mail или нет
- размеры фото
- размеры прикрепленных изображений
- размеры всплывающего изображения
- размер фото kB
- размер прикрепленных изображений kB
- количество отзывов в модуле
- разрешенные для загрузки типы файлов
- seo url
- заголовок страницы отзывов
- title страницы отзывов
- description страницы отзывов
- keywords страницы отзывов
5. Настройки модуля в позициях
- схему
- расположение
- статус
- размеры фото
- лимит
- порядок сортировки
6. Настройки отзыва
- дата публикации
- рейтинг
- статус
- автор
- текст
- фото
- дополнительные фото
Функциональные возможности:
Модуль использует стандартную схему работы upload opencart v1.5.6.4 с модификацией защиты(getimagesize, resize).
В случае неудачи upload изображений отзыва, изображения удаляются с сервера, отзыв не добавляется, покупателю отображается ошибка.
Валидация полей формы двухэтапная - js с дублированием на php. Осуществляется проверка расширения, размера, длинны имени файла.
Возможно назначить отдельной странице модуля h1, теги: title, description, keywords. Seo-url отдельной страницы работает при установленном расширении SeoPro.
Реализовано оповещение администрации магазина по средствам e-mail, указанной в разделе "Система-Настройки-Общие".
Стандартный input type=file кастомизирован, возможно использовать <a>, input и прочее, привязка к class тэга/поля и т.п.
Загрузка файлов без использования iframe, XMLHttpRequest, Flash, что позволяет на базе модуля реализовать любой интерфейс, используя только нужные технологии и решения.
Публичная оферта:
1. Автор не несет ответственности за код модуля и последствия его использования.
2. Модуль поддерживается/развивается силами сообщества opencartforum, автор не берет на себя обязательство поддержки/развития модуля.
3. Автор не заинтересован в платных доработках.
-
Автор
-
долучення21.03.16
-
Категорія
-
Системные требования
-
Метод активации
-
Ioncube Loader
-
ocStore
-
OpenCart.Pro, ocShop
-
Звернення до сервера розробника
- оповещать о новом отзыве по e-mail или нет
-
На рабочие версии opencart ставили модуль, получилось настроить?
-
Поддержка ostore/opencart:
v1.5.1.3.1 (требуется установка ColorBox v1.3.19)
v1.5.2.1 (требуется установка ColorBox v1.3.19)
v1.5.4.1
v1.5.3.1
v1.5.5.1
v1.5.6.4
Модуль не работает:
ostore/opencart v1.4.x и ниже
ostore/opencart v2.x и выше
Модуль тестировался только на ostore/opencart, работа на прочих сборках не гарантируется.
Позиция автора - модуль не работает на сторонних сборках opencart, кроме ostore. -
1. опубликуйте в спойлер log за последние 2 дня использования модуля (файл error.txt).
2. по-возможности ссылка на проект.
3. что имеется ввиду под "нет всплывающих окон", в описании модуля нет речи о подобном, на скриншотах модуля на форуме тоже. Если речь о выводе ошибок рядом с формой подписки, смотрите firebug скрипты, так же возможно из-за верстки ошибки на форме не видно.
Работа модуля тестировалась на opencart 1.5.x.
Настроили модуль корректно - "админ не получает уведомлении о новом подписчике"? Учтите что оповещение о новом подписчике приходит на e-mail, указанный в "Система-Настройки". -
а так чтоб заказы добавлялись в общую базу нереально сделать?
Да, задача не объемная, думаю программист уровня Senior справиться за пару часов.
Если реализуете функционал, опубликую вашу версию в ветке.
-
1. файл "/catalog/view/javascript/catapulta.js":
заменить$(document).ready(function () {
на
$(document).ready(function () { phone_mask = $('input[name=\'catapulta_contact\']').data('phoneMask'); if (phone_mask) { $('input[name=\'catapulta_contact\']').mask(phone_mask); }
2. файл "/catalog/controller/module/catapulta.php":
- удалить функцию "public function getForm()"
- функцию "protected function index()" заменить наprotected function index() { if ($this->config->get('catapulta_status')) { $this->language->load('module/catapulta'); $this->document->addScript('catalog/view/javascript/jquery/jquery.maskedinput.min.js'); $this->document->addScript('catalog/view/javascript/catapulta.js'); $this->data['heading_title'] = $this->language->get('heading_title'); $this->load->model('catalog/product'); $this->data['text_wait'] = $this->language->get('text_wait'); $this->data['entry_contact'] = $this->language->get('entry_contact'); $this->data['button_send'] = $this->language->get('button_send'); if ($this->config->get('catapulta_phone_mask_status')) { $this->data['phone_mask'] = $this->config->get('catapulta_phone_mask'); } else { $this->data['phone_mask'] = ''; } $phone_text = $this->config->get('catapulta_phone_text'); $this->data['phone_text'] = $phone_text[$this->config->get('config_language_id')]; $this->data['stock_status'] = 1; if (!$this->config->get('config_stock_checkout') || $this->config->get('config_stock_warning')) { $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']); if (!$product_info['quantity'] || ($product_info['quantity'] < 0)) { $this->data['error_warning'] = $this->language->get('error_stock'); if (!$this->config->get('config_stock_checkout')) { $this->data['stock_status'] = 0; } } } if ($this->customer->isLogged()) { $this->load->model('account/customer'); $this->data['text_customer'] = $this->language->get('text_customer'); $customer = $this->model_account_customer->getCustomer($this->customer->getId()); $data = array( 'contact' => $customer['telephone'], 'product_id' => $this->request->get['product_id'] ); $this->write($data); } if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/catapulta_form.tpl')) { $this->template = $this->config->get('config_template') . '/template/module/catapulta_form.tpl'; } else { $this->template = 'default/template/module/catapulta_form.tpl'; } $this->render(); } }
Оформление реализуется с помощью css/html + удалите лишнее из шаблона "/catalog/view/theme/YOUR_TEMPLATE/template/module/catapulta_form.tpl"
-
в файле "/catalog/model/catalog/arbitrage.php"
заменить$sql .= " ORDER BY a.date_added DESC, a.arbitrage_id DESC";
на
$sql .= " ORDER BY RAND()";
Выборка случайных полей будет производиться как на отдельной странице модуля, таки и в самом модуле. Выборка только для модуля усложнит реализацию.
-
Файл модуля с темы - "arbitrage.tpl", файл "testimonial.tpl" - другой модуль.
Большинство изменений внешнего вида модуля делаются средствами верстки css/html. Модуль сверстан под стандартный шаблон default. Для верстки модуля в "стиле" прочих шаблонов рекомендую обращаться к авторам шаблонов.
-
В ближайших планах нет. Год и более планирую заниматься текущими расширениями для 1.5.х пока 2.x не станет сбалансированной и надежной версией.
-
Автор подскажите, ваш модуль пойдет на opencart 2.0?
Почему спрашиваете - не прочли описание, неясно написано или что-то другое?
-
Спасибо что поделились.
Неделю назад установил цели на кнопки "Купить в 1 клик", "Заказать обратный звонок" и внутренние "Отправить". Метрика отображает все цели в разделе "Отчеты-Стандартные отчеты-Конверсия", менее детальную информацию можно увидеть в разделе "Вэбвизор". Т.е. цели внутренних кнопок у меня тоже срабатывают.
Отмечу, что легко ошибиться, вместо COUNTER_ID заполнив ID цели, что в моей реализации не сработает.
-
Не увидел окна с формой, полями, кнопкой отправить. Сообщение "Ваше сообщение отправлено! С Вами свяжется менеджер." выводится в том же окне colorbox, в котором содержится форма. Предположу что в вашем шаблоне окно отображается не так, как на скриншотах с описания модуля из-за реализации верстки, ищите верстальщика.
-
Здравствуйте автор!
Огромное вам спасибо за модуль! Только он работает с моей темой.
Скажите, почему после отправки номера пользователю не выводится никакое сообщение? Буду очень благодарен за помощь!
___
UP
__
Сообщение выводится в правом верхнем углу "Ваше сообщение отправлено! С Вами свяжется менеджер."
А можно как то в форме самого модуля вывести картинку либо надпись?
Выложите на форум в виде изображения (не ссылка) два скриншота - окно формы и окно с сообщением.
-
сделал поиск по простыне подписчиков, с модулем почти никак не связан)) тут публиковать не буду, хотя автор и уговаривает всех чтобы запостили свои решения))) хочу икорки на маслице намазать)))
раскрасил кнопки для секретарш
вывел кнопку ПОДПИСКИ на шапку, чтоб в менюшках не лазить мадамам с длинными ногтями)))
Опубликуйте свою версию модуля на opencartforum как платное дополнение, я не против, развивайте как посчитаете нужным. Этот форум самая посещаемая площадка opencart в СНГ на данный момент.
-
17 строчка /catalog/view/javascript/subscribe.js, этот код работает корректно
var email = $('input[name="subscribe_email'+module+'"]').attr('value');
Метод ".attr('value')" можно заменить на ".val()" в представленном коде они взаимозаменяемы, но изначально по какой-то причине у вас была ошибка
.attr('value', '');
такого кода в 17 строке нет в файле /catalog/view/javascript/subscribe.js
-
Код думается такой:
yaCounterXXXXXX.reachGoal('buy1click');
В какое место какого файла подскажите, пожалуйста, если код верный.Установить Яндекс Цель "событие" на кнопке "Купить в 1 клик"
1. файл /catalog/view/javascript/catapulta.js, в нем найти
function addToCatapulta() {
2. заменить наfunction addToCatapulta() { yaCounterCOUNTER_ID.reachGoal('TARGET_NAME');
Установить Яндекс Цель "событие" на кнопке "Отправить" формы отправки заказа:1. файл /catalog/view/javascript/catapulta.js, в нем найти
$('.catapulta-send').live('click', function () {
2. заменить на$('.catapulta-send').live('click', function () { yaCounterCOUNTER_ID.reachGoal('TARGET_NAME');
Функция Яндекса:yaCounterCOUNTER_ID.reachGoal('TARGET_NAME'); где: - COUNTER_ID — номер вашего счетчика; - TARGET_NAME — идентификатор цели.
Проверьте и напишите в ветку, работает ли у вас счетчик цели? Если нет, высылайте ошибки в спойлер с консоли firebug. -
Версия opencart 2.0.3.1
Вероятно не скопировали все файлы на хостинг. Повторите процедуру копирования, в панеле управления магазином "Дополнения-Модули" удалите/установите модуль заново. Если не поможет, ответе на вопросы:
1. убедитесь что внимательно изучили все функциональные возможности модуля, ознакомились со скриншотами модуля поясняющие его работу, четко понимаете описание модуля указанное на форуме
Описание к модулю:
Поддержка ostore/opencart: v1.5.1.3.1 (требуется установка ColorBox v1.3.19) v1.5.2.1 (требуется установка ColorBox v1.3.19) v1.5.4.1 v1.5.3.1 v1.5.5.1 v1.5.6.4
-
Доброго времени суток, подскажите пожалуйста, поставил модуль нажимаю редактировать его и он выдает ошибку :
Fatal error: Call to undefined method ControllerModuleCatapulta::render() in [/size]/var/www/vhosts/u0154055.plsk.regruhosting.ru/httpdocs/sport999.ru/admin/controller/module/catapulta.php on line [/size]120
Что делать??????((
Вероятно не скопировали все файлы на хостинг. Повторите процедуру копирования, в панеле управления магазином "Дополнения-Модули" удалите/установите модуль заново. Если не поможет, ответе на вопросы:
1. убедитесь что внимательно изучили все функциональные возможности модуля, ознакомились со скриншотами модуля поясняющие его работу, четко понимаете описание модуля указанное на форуме
2. предоставьте используемую вами версию opencart/ostore
3. разместите в спойлер лог из файла error.txt за последние два дня
-
Не получилось установить цель Яндекс Метрики на событие - нажатие кнопки "Отправить" формы "Купить в 1 клик"? Покажите какой код Яндекс Метрики и куда в форму "Купить в 1 клик" устанавливали.
-
При нажатии на кнопку "Установить" у модуля "Subscribe" в разделе "Дополнения-Модули".
[Поддержка] Отзывы с изображениями
в Модулі та розширення
Опубліковано:
Почему вы так думаете?
Что имеете ввиду?
Спасибо за ссылку, ознакомлюсь.