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

halfhope

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

    1 750
  • З нами

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

Усі публікації користувача halfhope

  1. Если бы у меня была возможность заменить все ТЭЦ на атомные или возобновляемые источники энергии я бы сразу решил этот вопрос, но такой возможности у меня нет. Поэтому лучше не думать о бесполезном и делать то, что можешь сам. Все начинается с малого. Не смотри на других, начни с себя.
  2. Не соглашусь, это как минимум энергоэффективно. Оптимизируя изображения и удаляя другие ненужные изгороди вы делаете мир экологичней т.к. тратится меньше энергии на передачу данных. С каждого по капле.
  3. Так уж вышло, что серверные библиотеки imagick и GD, которые обрабатывают изображения, не могут сделать их такими, какие они нужны PageSpeed (оптимизированными). Для оптимизации изображений без потери качества нужен сторонний пакет, а точнее пакеты для оптимизации png и jpeg изображений. Ими могут быть: JPEG jpegoptim JPEGmini Jpegtran PNG optipng pngcrush pptiPng tinyPng pngout Рекомендую ставить optipng и jpegoptim, потому что они проверены и другие я не пробовал) Для установки на сервер необходимы права на установку пакетов, которых нет на обычном shared хостинге, но обычно есть на VPS/VDS. Если у вас shared хостинг, то спросите у тех. поддержки о наличии одного из этих пакетов и возможности их установить, при их отсутствии. Либо установите сами, через терминал: apt-get install jpegoptim optipng или yum install jpegoptim optipng Затем нужно найти все jpg и png изображения и оптимизировать их. Ищем jpg изображения и оптимизируем их (не забывайте про аналогичное расширение jpeg): find /путь/к/сайту -name "*.jpg" -exec jpegoptim {} --strip-all \; Будьте внимательны, при использовании --strip-all удаляются метаданные изображений, такие как название фотоаппарата, геоданные и т.д. Если это критично, то уберите --strip-all из команды. Для PNG: find /путь/к/сайту -name "*.png" -exec optipng {} \; Если у вас все получилось и вы все еще читаете, значит можно добавить автоматическую обработку изображений в класс обработки изображений OpenCart, который находится по адресу system/library/image.php. Для этого необходимы права на вызов функции exec. В файл нужно добавить закомментированные строки. public function save($file, $quality = 90) { $info = pathinfo($file); $extension = strtolower($info['extension']); if (is_resource($this->image)) { if ($extension == 'jpeg' || $extension == 'jpg') { imagejpeg($this->image, $file, $quality); // exec('jpegoptim "' . $file . '"', $output, $result); } elseif($extension == 'png') { imagepng($this->image, $file); // exec('optipng "' . $file . '"', $output, $result); } elseif($extension == 'gif') { imagegif($this->image, $file); } imagedestroy($this->image); } }
  4. Для тех, кто пропустил. https://wp-kama.ru/id_6310/sintaksis-php-5-3-5-4-5-5-5-6-7-chto-novogo.html
  5. По-хорошему бы избавиться вообще от такого модуля. Могу только порекомендовать посмотреть файл catalog/controller/common/позиция_на_которой_выводится_модуль.php, там код, который отвечает за подгрузку модулей, там можно все решить костылем.
  6. Вопрос решен. Была проблема в большом количестве запросов сторонних модулей+парочка оптимизаций по коду.
  7. Загрузка и проверка происходит в контроллере common/filemanager, который находится в файле admin/controller/common/filemanager.php, а именно в функции upload. Там же можно добавить проверку или переименование файла, если такой уже существует. Для примера приведу отрезки кода из этой функции с проверкой и переименованием: if (!$this->user->hasPermission('modify', 'common/filemanager')) { $json['error'] = $this->language->get('error_permission'); } ############## // Вариант 1. Проверка if(file_exists($directory . '/' . $filename)){ $json['error'] = $this->language->get('error_file_exists'); // не забудьте добавить error_file_exists в языковой файл common/filemanager } // Вариант 2. Переименование if(file_exists($directory . '/' . $filename)){ $counter = 1; //объявляем счетчик $info = pathinfo($filename); //разбираем название файла и расширение $new_filename = $info['filename'] . $counter . $info['extension']; //генерируем новое имя файла while(file_exists($directory . '/' . $new_filename)){ $new_filename = $info['filename'] . $counter . $info['extension']; $counter++; } $filename = $new_filename; } ############## if (!isset($json['error'])) { if (@move_uploaded_file($this->request->files['image']['tmp_name'], $directory . '/' . $filename)) { $json['success'] = $this->language->get('text_uploaded'); } else { $json['error'] = $this->language->get('error_uploaded'); } } Код не проверял, но должен работать. И второй вариант будет работать на PHP 5.2 и старше т.к. filename pathinfo начала возвращать именно с этой версии.
  8. Нет такой схемы. Фреймворк очень простой, даже в документации нет необходимости) Какой именно момент работы механизма корзины интересует? Вот тема, там немножко другое, но сейчас кратко опишу и все поймете. 1. При добавлении товара массив данных с ID, количеством и опциями передается контроллеру checkout/cart/add (catalog/controller/checkout/cart.php). add в данном случае название функции контроллера. 2. Далее функция add контроллера checkout/cart передает данные в класс cart (system/library/cart.php), который и является интерфейсом корзины и доступен по адресу $this->cart $this->cart->add($this->request->post['product_id'], $quantity, $option, $profile_id); 3. В зависимости от версии, данные корзины cart сохраняются в сессию пользователя, либо в БД. Вот статьи в помощь: Серия статей. OpenCart для разработчиков. Часть 1. [Описание основных классов] Серия статей. OpenCart для разработчиков. Часть 2. [Описание функций моделей каталога]
  9. Для Apache, для nginx нету, только в голове сидит. Пользуйтесь поиском, в интернете очень много информации. Вы не можете управлять заголовками на внешние ресурсы ими управляет отдающий их сервер, т.е. не ваш.
  10. нет, в той версии, что у меня данные корзины хранятся в БД, а не в сессии.
  11. Вариант 1. Используется в OpenCart $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'); Так можно собрать содержимое полей всех опций. Еще в приведенном коде используется обертка в #product, чтобы выборка не пересекалась с другими полями, которые могут использоваться на странице. Приведу полный код из дефолтного шаблона OpenCart версии 2.1.0.1, в нем quantity передается вместе с опциями: HTML: <button type="button" id="button-cart" class="btn btn-primary btn-lg btn-block">Купить</button> JS: $('#button-cart').on('click', function() { $.ajax({ url: 'index.php?route=checkout/cart/add', type: 'post', data: $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'), dataType: 'json', beforeSend: function() { // }, complete: function() { // }, success: function(json) { // }, error: function(xhr, ajaxOptions, thrownError) { // } }); }); Вариант 2. Сериализация формы. Вместо громоздкой конструкции по выборке всех полей формы можно выбрать все сразу: $(this).serialize(); Порядок опций определяется их сортировкой.
  12. Готов взяться. Но за journal2 придется доплатить. Пишите в ЛС. UPD: Не возьмусь, если Вы будете ориентироваться на показатели PageSpeed и GTMetrix, смотрите реальную скорость загрузки страниц. Эти сервисы лишь проверяют наличие шаблонов клиентской оптимизации.
  13. Вперед) https://strongpasswordgenerator.com/ (Справа зеленая кнопка Generate).
  14. Спасибо! Могу помочь, с гарантией. Пишите в ЛС. Рекомендую ничего не удалять самому, это испортит картину заражения и не получится красивый отчет.
  15. // Cart Корзина $this->cart->getProducts(); //Получает все товары находящиеся в корзине учитывая опции, акции. $this->cart->add( $product_id, $qty = 1, $options = array()); // Добавление товара в корзину $this->cart->remove( $key ); // Удаление товара из корзины $this->cart->clear(); // Очистка корзины $this->cart->getWeight(); // Получение веса всей корзины $this->cart->getSubTotal(); // Получение суммы цен элементов корзины без вычета налогов $this->cart->getTotal(); // Получение суммы цен элементов корзины с вычетом налогов $this->cart->countProducts(); // Получение количества товаров в корзине $this->cart->hasProducts(); // Проверяет пуста корзина или нет $this->cart->hasStock(); // Возвращает false, если хотя бы один элемент корзины отсутствует на складе(в продаже) $this->cart->hasShipping(); // Возвращает true, если хотя бы один элемент корзины требует доставку $this->cart->hasDownload(); // Возвращает true, если хотя бы один элемент корзины связан с какой-либо загрузкой Описание основных классов можно посмотреть тут. К сожалению, на данный момент, посмотреть сайт можно только в кэше.
  16. Добрый вечер) В консоли браузера (Ctrl+Shift+i) видна ошибка, которая говорит от том, что функции colorbox не существует. Вы не подключили стили и скрипты colorbox-а в шапке сайта. Лучше делать это через контроллер, чтобы стили и скрипты colorbox загружались только тогда когда они нужны, а не подгружались на каждой странице сайта. Найдите файл catalog/controller/information/information.php и добавьте в начало функции index() строки: $this->document->addStyle('catalog/view/javascript/jquery/colorbox/colorbox.css'); $this->document->addScript('catalog/view/javascript/jquery/colorbox/jquery.colorbox-min.js');
  17. Спасибо, там автоматика стоит, чтобы каждый год не обновлять, склонять слова она не умеет)
  18. подробности на http://ockb.ru/. Пользователям форума скидка)
  19. Зависит от того как именно происходит проверка оплаты. Если сервер киви шлет запрос на сайт, то храните данные в БД. Если проверка происходит при участии пользователя (вы шлете запрос на сервера киви), то можно и в сессии, но все равно желательно в БД. Короче в БД будет правильней во всех смыслах.
  20. Нет не будет. Это же единичная задача. Храните значения в БД.
×
×
  • Створити...

Important Information

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