Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Recommended Posts

Наш стек: (OPENCART 1.5), Memcached, MуSQL. Интернет-магазин интегрирован с 1С и облачной CRM, платежной системой.
часть внутреннего функционала написано JavaScript фреймворке Vue.js 

Требования к кандидату:
- Знание php mysql html css javascrip
- Знание архитектуры MVC
- Опыт работы с опенкарт ocStore Версия 1.5.5.1.2
- Умение работать с системой контроля версий Git (github.com)

Оплата 500р в час. 
Задачи составляются в подробное ТЗ, выполнение контролируется тимлидом. 
Работа не разовая, задачи на доработки появляются регулярно.
примерная загрузка 50-100 часов в месяц.

Обязанности:
Развитие интернет-магазина,
Интеграции с внешними сервисами,
Правка или доработка шаблона,
Работы по ускорению магазина,
Написание нового функционала и расширение функций движка.
Дописывания новой бизнес логики.


- Текущие задачи требующие выполнения.
* Доработать внутренний скрипт управления товарами (php).
* Исправить ошибки php кода из журнала логирования ошибок
* Перевести движок сайта с php 5.6 => php 7.3
* Настроить кеширование запросов к базе данных на тяжелых страницах
* Поработать со скоростью загрузки страниц сайта.

 

При откликах желательно прикреплять портфолио и описание о себе.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By kairos
      Приветствую форумчане. Такая проблема, пытаюсь выполнить ajax запрос, суть которого отправить некоторые данные с домена: a.com на b.com и соответственно получить ответ от b.com с целью дальнейшей его обработки в скрипте на a.com
      Оба домена находятся на OpenServer на локальной машине, то есть у меня есть контроль над http://b.com/ и я могу прописать в php файле необходимые настройки.
      Однако при попытке выполнить ajax запрос получаю ошибку:

      jquery-3.6.0.min.js:2 Cross-Origin Read Blocking (CORB) blocked cross-origin response http://b.com/?callback=jQuery360001053556176974424_1630579545897&_=1630579545898 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.
       
      Аналогичную ситуацию имею на хостинге уже на реальных доменах. 
      При этом данные c a.com на b.com в php скрипт все же попадают, однако, мне не удается добиться чтения ответа на домене a.com.
      Что характерно в сети есть по меньшей мере один домен с которого таки удается получить данные таким способом.
      Если вместо b.com подставить страницу:
      https://jsonplaceholder.typicode.com/todos/1
      то в этом случае получаю ответ:
      {userId: 1, id: 1, title: "delectus aut autem", completed: false}
      Однако же добиться аналогичного эффекта на домене под собственным контролем я не могу.
       
      Пробовал в js указывать crossDomain: true, на стороне php пробовал указывать различные заголовки по типу:
      header('content-type: application/json');
      и тому подобное... пробовал даже скопировать из браузера заголовки которые отдает
      сайт https://jsonplaceholder.typicode.com/todos/1 и подставить их в php файл через тот же header() однако ничего не выходит.
      Подскажите куда копать? Вопрос вроде плевый, но сколько не пытаюсь ничего не получается.

      Ниже код js:

       
      <script> //Первый вариант на jQuery: $(document).ready(function(){ $.ajax({ url: "http://b.com", crossDomain: true, dataType: "jsonp", success: function( response ) { console.log(response); } }); }); </script> <script> //Второй вариант на чистом js: function receiver(data){ console.log(data); } </script> <script src="http://b.com/?callback=receiver"></script> код php:

       
      <?php header('content-type: application/json'); header('Access-Control-Allow-Origin: http://a.com'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); echo '{"foo":"bar"}'; ?>  
    • By ocbot
      Подскажите лучший способ как c помощью php спарсить кусок кода, отвечающий за вывод блока товара, из файла шаблона product/category.twig
      По идее, нужно спарсить все что находится внутри цикла {% for product in products %} и записать этот код в отдельный файл, чтобы потом подключать его через include в других шаблонах.
      Изначально получаю код файла и записыю в переменную:
      $content = file_get_contents(DIR_CATALOG . 'view/theme/'.$this->config->get('config_theme').'/template/product/category.twig');
      А дальше регулярку писать или есть другие варианты? Если регулярка, то помогите составить выражение.
      Спасибо всем, кто отзовется!
    • By Alexandr15
      Подскажите пожалуйста как в opencart 3 в стандартном (базовом) модуле featured вывести опции товаров
      В файл: modification\catalog\controller\extension\module\featured.php
      добавил код:
      $options = array(); foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) { if($option['required']){ $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$option_value['subtract'] || ($option_value['quantity'] >= 0)) { $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $this->model_tool_image->resize($option_value['image'], 50, 50), 'quantity' => $option_value['quantity'], 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } } Также в $data['products'][] = array(
      добавил:
      'options' => $options, Для вывода в файле: template\extension\module\featured.twig
      в карточку товара добавил код:
      {% if product.options %} {% for option in product.options %} {% if option.type == 'radio' %} <div class="groupOptionWrap {% if option.required %} required {% endif %}"> <div id="input-option{{ option.product_option_id }}" class='groupOptionElements'> {% for option_value in option.product_option_value %} {% if option_value.quantity == "0" %} <div class="groupOption groupOptionDisable"> {{ option_value.name }} </div> {% else %} <div class="groupOption"> {{ option_value.name }} </div> {% endif %} {% endfor %} </div> </div> {% endif %} {% endfor %} {% endif %} Но это не сработало, просьба подсказать, если кто знает рабочий вариант
      Весь код данного модуля:
      <?php class ControllerExtensionModuleFeatured extends Controller { public function index($setting) { $this->load->language('extension/module/notify_when_available'); $data['text_out_of_stock'] = $this->language->get('text_out_of_stock'); $data['out_of_stock_show'] = $this->config->get('module_notify_when_available_stock'); $data['out_of_stock_notify'] = $this->config->get('module_notify_when_available_notify'); $this->load->language('extension/module/featured'); $this->load->model('catalog/product'); $this->load->model('tool/image'); $data['products'] = array(); if (!$setting['limit']) { $setting['limit'] = 4; } if (!empty($setting['product'])) { $lang = $this->config->get('config_language_id'); $title = isset($setting['titles']['title'.$lang]) && $setting['titles']['title'.$lang] ? $setting['titles']['title'.$lang] : ''; if (isset($title) && $title) { $data['heading_title'] = $title; } if (isset($setting['shuffle']) && $setting['shuffle']) { shuffle($setting['product']); } $products = array_slice($setting['product'], 0, (int)$setting['limit']); foreach ($products as $product_id) { $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if ($product_info['image']) { $image = $this->model_tool_image->resize($product_info['image'], $setting['width'], $setting['height']); } else { $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']); } if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); $data['priceInt'] = $this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')); } else { $price = false; } $specialSavings =0; if ((float)$product_info['special']) { $special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); $data['specialInt'] = $this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')); $data['specialSavings'] = round((($data['priceInt']-$data['specialInt'])/$data['priceInt'])*100, 2); $specialSavings = $data['specialSavings']; } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price'], $this->session->data['currency']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = $product_info['rating']; } else { $rating = false; } $options = array(); foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) { if($option['required']){ $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$option_value['subtract'] || ($option_value['quantity'] >= 0)) { $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $this->model_tool_image->resize($option_value['image'], 50, 50), 'quantity' => $option_value['quantity'], 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } } $data['products'][] = array( 'product_id' => $product_info['product_id'], 'quantity' => $result['quantity'], 'quantity' => $product_info['quantity'], 'quantity' => isset($result['quantity']) ? $result['quantity'] : (isset($product_info['quantity']) ? $product_info['quantity'] : 1), 'attribute_groups' => $this->model_catalog_product->getProductAttributes($product_info['product_id']), 'thumb' => $image, 'name' => $product_info['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'specialSavings' => $specialSavings, 'tax' => $tax, 'rating' => $rating, 'options' => $options, 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) );  
       
    • By AnnaBez
      В контроллере я добавила функцию и попыталась html с данными из view сделать pdf, но ничего не выходит. Подскажите что я делаю не так?
      public function pdf_invoice($html){ $dompdf = new Dompdf(); $dompdf->loadHtml($html, 'UTF-8'); $dompdf->setPaper('A4', 'portrait'); $dompdf->render(); // Вывод файла в браузер: $dompdf->stream('my.pdf',array('Attachment'=>0)); } public function index() { ... $this->pdf_invoice($this->load->view('extension/payment/invoice', $data)); }  
    • By MaJIon
      Здравствуйте, можно ли как-то соединить эти запросы таким образом, чтобы через post передавать нужные параметры и эти запрос как-то фильтровать в зависимости от клика по кнопке + или - 

       
      public function updateLike($product_id) { $this->db->query("SELECT * FROM " . DB_PREFIX . "product SET like_count = (like_count - 1) WHERE product_id = '" . (int)$product_id . "'"); } public function updateLikeMinus($product_id) { $this->db->query("UPDATE " . DB_PREFIX . "product SET like_count = (like_count - 1) WHERE product_id = '" . (int)$product_id . "'"); } public function updateLikePlus($product_id) { $this->db->query("UPDATE " . DB_PREFIX . "product SET like_count = (like_count + 1) WHERE product_id = '" . (int)$product_id . "'"); }  
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.