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

berrber

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

    265
  • З нами

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

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

  1.  

    Для этого мало ресайзить, тем более через стандартный класс Image

    Почему вы так думаете?

     

    первое что надо сделать отдавать файлы не на прямую, а через скрипты

    Что имеете ввиду?

     

    Спасибо за ссылку, ознакомлюсь.

  2. Как вы заметили ранее это не эффективный метод, тем не менее его наличие позволяет в некоторых случаях сэкономить на 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;
            }
    
  3.  

    Т е без ресайза ЗАГРУЖЕННОЙ бомбы

    Не понял смысл.

     

    Как писал ранее preg_match не ключевой метод проверки.

    Изображение модифицируется изменением размера, что позволяет думать о полном удалении присутствующего в нем скрипта.

    Опубликуйте источники откуда цитаты брали.

  4. 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']; ?>"

    ?

    И посмотрите класс Image, условие при котором не происходит ресайз ;)

    Надеюсь вы не об этом, т.к. там resize не для безопасности

     if ($result['image']) {
    $image = $this->model_tool_image->resize($result['image'], $image_width, $image_height);
    } else {
    $image = '';
    }
    Если вы об этом

    $image->resize($width, $height);
    
    То о каком условии речь?
  5. Код "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. прошлая беседа, на ту же тему, с вами Отзывы покупателей о магазине (отдельная страница)

  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
    • Звернення до сервера розробника

     

  7. Поддержка 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.

  8. 1. опубликуйте в спойлер log за последние 2 дня использования модуля (файл error.txt).
    2. по-возможности ссылка на проект.
    3. что имеется ввиду под "нет всплывающих окон", в описании модуля нет речи о подобном, на скриншотах модуля на форуме тоже. Если речь о выводе ошибок рядом с формой подписки, смотрите firebug скрипты, так же возможно из-за верстки ошибки на форме не видно.

    Работа модуля тестировалась на opencart 1.5.x.

    Настроили модуль корректно - "админ не получает уведомлении о новом подписчике"? Учтите что оповещение о новом подписчике приходит на e-mail, указанный в  "Система-Настройки".

  9. а так чтоб заказы добавлялись в общую базу нереально сделать?

     

     

    Да, задача не объемная, думаю программист уровня Senior справиться за пару часов.

    Если реализуете функционал,  опубликую вашу версию в ветке.

  10. 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"

  11. в файле "/catalog/model/catalog/arbitrage.php"

    заменить

    $sql .= " ORDER BY a.date_added DESC, a.arbitrage_id DESC";
    

    на

    $sql .= " ORDER BY RAND()";
    

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

  12. Файл модуля с темы - "arbitrage.tpl", файл "testimonial.tpl" - другой модуль.

    Большинство изменений внешнего вида модуля делаются средствами верстки css/html. Модуль сверстан под стандартный шаблон default. Для верстки модуля в "стиле" прочих шаблонов рекомендую обращаться к авторам шаблонов.

  13. Спасибо что поделились.

     

    Неделю назад установил цели на кнопки "Купить в 1 клик", "Заказать обратный звонок" и внутренние "Отправить". Метрика отображает все цели в разделе "Отчеты-Стандартные отчеты-Конверсия", менее детальную информацию можно увидеть в разделе "Вэбвизор". Т.е. цели внутренних кнопок у меня тоже срабатывают.

     

    Отмечу, что легко ошибиться, вместо COUNTER_ID заполнив ID цели, что в моей реализации не сработает.

  14. Не увидел окна с формой, полями, кнопкой отправить. Сообщение "Ваше сообщение отправлено! С Вами свяжется менеджер." выводится в том же окне colorbox, в котором содержится форма. Предположу что в вашем шаблоне окно отображается не так, как на скриншотах с описания модуля из-за реализации верстки, ищите верстальщика.

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

    Огромное вам спасибо за модуль! Только он работает с моей темой.

    Скажите, почему после отправки номера пользователю не выводится никакое сообщение? Буду очень благодарен за помощь!

     

    ___

    UP

    __

    Сообщение выводится в правом верхнем углу "Ваше сообщение отправлено! С Вами свяжется менеджер."

    А можно как то в форме самого модуля вывести картинку либо надпись?

     

    Выложите на форум в виде изображения (не ссылка) два скриншота - окно формы и окно с сообщением.

  16. сделал поиск по простыне подписчиков, с модулем почти никак не связан)) тут публиковать не буду, хотя автор и уговаривает всех чтобы запостили свои решения))) хочу икорки на маслице намазать)))

    раскрасил кнопки для секретарш

    вывел кнопку ПОДПИСКИ на шапку, чтоб в менюшках не лазить мадамам с длинными ногтями)))

    Опубликуйте свою версию модуля на opencartforum как платное дополнение, я не против, развивайте как посчитаете нужным. Этот форум самая посещаемая площадка opencart в СНГ на данный момент.

  17. 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

  18. Код думается такой:

    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.
  19. Версия 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
    
  20. Доброго времени суток, подскажите пожалуйста, поставил модуль нажимаю редактировать его и он выдает ошибку :

    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 за последние два дня

  21. Не получилось установить цель Яндекс Метрики на событие - нажатие кнопки "Отправить" формы "Купить в 1 клик"? Покажите какой код Яндекс Метрики и куда в форму "Купить в 1 клик" устанавливали.

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

Important Information

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