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

halfhope

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

    1 750
  • З нами

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

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

  1. Была похожая задача:

     

     

     

    Всем привет. Вопрос такого плана, я добавил class="active" к id="cart" когда товар попадает в корзину.
    Вот так $('#cart').addClass('active');
    Все норм, только при перезагрузке страницы класс исчезает. Вопрос как оставить класс на месте даже после перезагрузки страниц?

     

    А вот мой ответ:

     

    В файле catalog\view\theme\default\template\module\cart.tpl
    Заменить первую строку на

    <div id="cart" <?php if (!empty($products)) {echo "class=\"active\""; } ?>> 

    либо на

    <div id="cart" <?php print (!empty($products)) ? 'class="active"': ''; ?>> 

    Вам еще нужно будет разобраться с проблемой удаления из корзины товара. т.е. когда пользователь удаляет последний товар из корзины, то класс active должен удаляться. Если я правильно понял. Для решения замените в том же файле

    <td class="remove">
      <img src="catalog/view/theme/default/image/remove-small.png"
      alt="<?php echo $button_remove; ?>"
      title="<?php echo $button_remove; ?>"
      onclick="(getURLVar('route') == 'checkout/cart' || getURLVar('route') == 'checkout/checkout') ? location = 'index.php?route=checkout/cart&remove=<?php echo $product['key']; ?>' : $('#cart').load('index.php?route=module/cart&remove=<?php echo $product['key']; ?>' + ' #cart > *');" />
    </td> 

    на

    <td class="remove">
      <img src="catalog/view/theme/default/image/remove-small.png"
      alt="<?php echo $button_remove; ?>"
      title="<?php echo $button_remove; ?>"
      onclick="(getURLVar('route') == 'checkout/cart' || getURLVar('route') == 'checkout/checkout') ? location = 'index.php?route=checkout/cart&remove=<?php echo $product['key']; ?>' : $('#cart').load('index.php?route=module/cart&remove=<?php echo $product['key']; ?>' + ' #cart > *'); <?php if (count($products) == 1){ echo "$('#cart').removeClass('active');";} ?>" />
    </td> 

    ,то есть в конце onClick нужно добавить код

    <?php if (count($products) == 1){ echo "$('#cart').removeClass('active');";} ?> 

    который проверяет последний это товар в корзине или нет. Если да, тогда удаляет класс active.

    • +1 1
  2. А почему не вынимать еще из контроллера размеры? Ведь указываются они еще в админке, потом в контролере используются для изменения размеров изображений, шлепаем в переменные и вызывает вместе с путем каринки, профит. 

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

    halfhope

     

    Можно и так, так даже правильней. Я просто чтобы пользователи не путались так сделал.

     

    В общем все работает, единственное непонятно; в некоторых картинках размер указан, а gtmetrix.com говорит что надо поставить???

    Пробовал так и этак результат одинаковый:

    <div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" "width: 500px; height: 60px;" alt=" <?php echo $name; ?>" /></a></div>
    <div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" style= "width: 500px; height: 60px;" alt=" <?php echo $name; ?>" /></a></div>
     

    Вы неправильно указываете размеры!!! В формате HTML!!! Откуда Вы взяли "width: 500px; height: 60px;" и style= "width: 500px; height: 60px;" ?????

    Нужно вот так

    <img src="<?php echo $logo; ?>" title=" <?php echo $name; ?>" width="500" height="60" alt=" <?php echo $name; ?>" />
    
  3. Повторюсь, нельзя так делать, особенно на адаптивных шаблонах типа Shoppica2.

     

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

     

    Во вторых, замена всех image реплейсом из класса response - очень плохая идея, которая никак не сходится с архитектурой OpenCart, получается говнокод. Хотите сделать из магазина помойку, пожалуйста.

    Самый правильный способ - указать размеры только для тех изображений, которым это необходимо. Как узнать каким изображениям это необходимо?

    Во первых, это все изображения в шапке сайта т.е. чаще всего это только логотип. для этого необходимо открыть логотип, узнать его размер. Открыть файл catalog/view/theme/название-темы/common/header.tpl найти вывод логотипа и вручную указать высоту и ширину. Так же с остальными изображениями в шапке сайта.

     

    Во вторых, изображения категорий и модулей, которые стоят в начале страницы, т.е. модулей, которые показаны при загрузке сайта без прокрутки страницы.
    В обоих случаях необходимо получить настройки (ширина/высота) изображений в контроллере и передать их в шаблон. Но чтобы ускорить процесс, можно получить и вставить ширину и высоту прямо в файле шаблона.

    Открываем файл шаблона категории, находим вывод изображения товара и добавляем ширину и высоту:

    <div class="image">
    <a href="<?php echo $product['href']; ?>">
    <img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" width="<?php echo $this->config->get('config_image_product_width') ?>" height="<?php echo $this->config->get('config_image_product_height') ?>" alt="<?php echo $product['name']; ?>" />
    </a>
    </div>
    

    Аналогично с файлами шаблонов модулей.

  4. Решение для SeoPro.

    Я вообще не понимаю зачем это вам. Вы используете это решение на свой страх и риск, и не факт, что оно у Вас сработает!!!
     
    Теория.

    При обработке GET переменной product_id необходимо добавить перед запросом seo-url товара предзапрос для получения суффикса zzzz. Чтобы получилось так:

    $quires[] = 'product_suffix';
    $quires[] = 'product_id=42';

    А в БД, в таблице oc_url_alias значения запросов равны:

    'product_suffix' = 'zzzz'
    'product_id=42' = 'test'

    Т.е. у нас должна сформироваться ссылка /zzzz/test.html

    Решение.

    Файл controller/catalog/common/seo_pro.php, ищем:

    $queries = array();
    foreach ($data as $key => $value) {
    	switch ($key) {
    		case 'product_id':
    		case 'manufacturer_id':
    		case 'category_id':
    		case 'information_id':
    			$queries[] = $key . '=' . $value;
    			unset($data[$key]);
    			$postfix = 1;
    			break;
    
    		case 'path':
    			$categories = explode('_', $value);
    			foreach ($categories as $category) {
    				$queries[] = 'category_id=' . $category;
    			}
    			unset($data[$key]);
    			break;
    
    		default:
    			break;
    	}
    }
    
    

     
    Добавляем:
     

    $queries = array();
    foreach ($data as $key => $value) {
    	switch ($key) {
    		case 'product_id':
    			// Добавляем предзапрос на поиск суффикса zzzz
    			$queries[] = 'product_suffix';
    			$queries[] = $key . '=' . $value;
    			unset($data[$key]);
    			$postfix = 1;
    			break;
    			// конец
    		case 'manufacturer_id':
    		case 'category_id':
    		case 'information_id':
    			$queries[] = $key . '=' . $value;
    			unset($data[$key]);
    			$postfix = 1;
    			break;
    
    		case 'path':
    			$categories = explode('_', $value);
    			foreach ($categories as $category) {
    				$queries[] = 'category_id=' . $category;
    			}
    			unset($data[$key]);
    			break;
    
    		default:
    			break;
    	}
    } 

    Все готово. Могут быть разные версии seo_pro, но я в них не разбираюсь, так что у некоторых на странице товаров может возникать ошибка Undefined offset:  1 in catalog\controller\common\seo_pro.php on line 42 Тем, у кого возникает эта ошибка необходимо заменить:

    reset($parts);
    foreach ($parts as $part) {
    	$url = explode('=', $queries[$part], 2);
    
    	if ($url[0] == 'category_id') {
    		if (!isset($this->request->get['path'])) {
    			$this->request->get['path'] = $url[1];
    		} else {
    			$this->request->get['path'] .= '_' . $url[1];
    		}
    	} else {
    		$this->request->get[$url[0]] = $url[1];
    	}
    }
    
    

    На:

    reset($parts);
    foreach ($parts as $part) {
    	$url = explode('=', $queries[$part], 2);
    
    	if ($url[0] == 'category_id') {
    		if (!isset($this->request->get['path'])) {
    			$this->request->get['path'] = $url[1];
    		} else {
    			$this->request->get['path'] .= '_' . $url[1];
    		}
    	} else {
    		// Добавляем проверку 
    		if ($url[0] !== 'product_suffix') {
    			$this->request->get[$url[0]] = $url[1];
    		}
    		// конец
    	}
    }
    

    Теперь в таблицу oc_url_alias нужно добавить poduct_suffix=zzzz, это можно сделать с помощью запроса:

    INSERT INTO `oc_url_alias` (`query`, `keyword`) VALUES
    ('product_suffix', 'zzzz');
    
    • +1 1
  5. Все поиски и замены в vqmod работают только в пределах одной строки т.к. vqmod обрабатывает редактируемые файлы построчно. Если Вам нужно сделать как в варианте ниже:

    if ($my_var == SOME_VAL && $module['layout_id'] == $layout_id && $module['position'] == 'content_top' && $module['status'])
    

    то используйте обычный поиск + обычный replace без регулярок и всего прочего.

     

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

  6. Кажется я нашел:

     файл error.txt какой то странный вес 30 Мб (!) открыть не могу ни чем, ошибки редакторы выдают. Попытался открыть в админке журнал ошибок, все надписи админки сразу стали кракозябрами, все остальные функции работают кракозябров не появляется.  

     

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

  7. там лежит только index.html файл пустой (открывал в редакторе) размер у него 0 дата изменения у него двухгодовалая, и еще txt с ошибками, больше ни чего нет  

     

    Уже хорошо, если в папке downloads есть что-нибудь лишнее, то удаляйте. При условии использования старого софта на сервере, присутствия необходимых настроек PHP туда можно залить и вызвать шелл. Удаляйте оттуда все и из файла catalog/controller/product/product.php уберите функцию upload (или закомментируйте ее). Именно благодаря ей туда попадают файлы. Кстати, antihack.xml от Васо рекомендую поставить в любом случае.

  8. антивирус его опознал вот так: Trojan:Win32/Peals.B!plock

     

    В версиях меньше 1.5.4 есть уязвимости, которыми не стоило пренебрегать.

     

    Откройте папку system/logs, если там есть php или phtml файлы, то значит проникли через админку, меняйте пароль администратора, и ставьте antihack.xml от Baco, затем проводите чистку.

  9.  

    Столкнулся с некоторыми проблемами.

     

    1) в поле где прописывается адрес шаблона, после сохранения выскакивает:

    <b>Notice</b>: Undefined index: template_name in <b>/home/p303010/www/xn--e1afpeutp.com/admin/view/template/module/custom_template.tpl</b> on line <b>168</b>

    пример - фото

     

    2) При открытии отмеченных категорий вылезают уже такие ошибки:

    Notice: Undefined index: template_name in /home/p303010/www/xn--e1afpeutp.com/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 438
    Notice: Undefined index: template_name in /home/p303010/www/xn--e1afpeutp.com/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 439
    Warning: require(/home/p303010/www/xn--e1afpeutp.com/catalog/view/theme/shin): failed to open stream: No such file or directory in /home/p303010/www/xn--e1afpeutp.com/vqmod/vqcache/vq2-system_engine_controller.php on line 66
    Fatal error: require(): Failed opening required '/home/p303010/www/xn--e1afpeutp.com/catalog/view/theme/shin/' (include_path='.:/usr/local/php54/lib/php') in /home/p303010/www/xn--e1afpeutp.com/vqmod/vqcache/vq2-system_engine_controller.php on line 66

     

    Предоставьте доступ (FTP, Админка) в ЛС. Посмотрю что не так, исправлю и отвечу в теме.

  10. Есть) Шаблоны для товаров производителя и шаблоны для схем. Реально ли?

     

    Обновил. Добавил поддержку шаблонов для производителей, со схемами совсем другая история. Сомневаюсь, что буду делать. 

  11. Да. Нашел старую версию. Решил протестировать. С ошибкой вопрос решил. Но вот не хочет работать: Файлы создает, в "Менеджер кеша" видно. А вот на страницах сайта ничего не объединяется(не меняется).

     

    В MCJ 1.2 переменная $output из класса response передавалась на обработку с символом амперсанда, что позволяло передавать ее содержимое для редактирования в класс MCJ_OpenCart, т.е. не нужно было ее возвращать, все изменения этой переданной в класс переменной так же меняли $output из response.

     

    С приходом php 5.3 это стало невозможным, поэтому нужно получить обработанный результат и присвоить его переменной $output из класса response. В MCJ 1.3 эта проблема решена. 

  12. PHP Notice:  Undefined property: mcj_opencart::$output in .../index.php on line 262

     

    Вас нет в списке купивших. И все же заново скопируйте все файлы. В классе mcj_opencart публичная переменная $output присутствует.

  13. https://halfhope.ru/2014/10/14/opencart-%D0%BB%D0%BE%D0%B3%D0%BE%D1%82%D0%B8%D0%BF-%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8F-%D0%B2-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8/

     

    Перейдите сразу к середине статьи, к пункту "Вывод логотипа производителя товара на странице категорий". Процесс добавления производителей на странице поиска и категории одинаков, за исключением имен файлов (category.php/search.php).

  14. Сорри что врываюсь. Только недавно обнаружил, что при включенной минификации (Minify HTML) обрезает яндексевские тэги noindex, написанные в виде комментария для корректной валидации <!--noindex--> <!--/noindex-->. Если же заюзать вашу версию, которая не трогает эти тэги, то гугловский PageSpeed Insights ругается, что можно страничку ужать еще на 940 байтов  :ugeek:  Есть ли варинты оставить эти тэги и чтобы гугл не ругался?

     

    Нет, Google Page Speed Ругается на все теги, заключенные между <!-- и -->. А Встроенные в модуль HTML минимизаторы тоже считают их комментариями. Еще раз повторяюсь, что Google Page Speed это инструмент для проверки наличия паттернов оптимизации и все. Не следует следовать им всем. 

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

Important Information

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