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

kairos

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

    53
  • З нами

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

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

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

    На проблемном хостинге помог файл: .htaccess со следующим содержимым:
     

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews -Indexes
        </IfModule>
    
        <IfModule mod_headers.c>
        Header always set Access-Control-Allow-Origin "https://b.com"
        Header always set Access-Control-Allow-Methods "GET,POST,PATCH,PUT,DELETE,OPTIONS"
        Header always set Access-Control-Allow-Headers "*"
        Header always set Access-Control-Allow-Credentials "*"
        Header set Access-Control-Allow-Credentials true
      </IfModule>
    </IfModule>


    При этом аналогичные запросы из php  файла пришлось убрать, итоговый код:

    PHP:

     

    <?php
    header('content-type: application/json');
    
    echo '{"foo":"bar"}';
    
      file_put_contents(__DIR__ . '/test_GET_data.txt', var_export($_GET, true));
      file_put_contents(__DIR__ . '/test_POST_data.txt', var_export($_POST, true));
    ?>

     

    JS:

     

    $(document).ready(function(){
                      $.ajax({
                        url: "https://b.com/",
                        crossDomain: true,
                          success: function( response ) {
                            console.log(response);
                          }
                      });
                    });

     

    • +1 1
  2. В общем следующий код на локальной машине отдает данные нормально:

    $(document).ready(function(){
     
        $.ajax({
        url: "http://b.com",
        crossDomain: true,
            success: function( response ) {
              console.log(response);
            }
      });
     
    });


     

    <?php
    
    	 header('content-type: application/json');
       header('Access-Control-Allow-Origin: http://a.com');
    
    	echo '{"foo":"bar"}';
    ?>

     

    То есть на локалке достаточно было убрать: dataType: "jsonp", однако на виртуальном хостинге этот код не работает, видимо блокировка идет где то на уровне настроек хостинга, интересно можно ли это решить средствами php или скажем путем добавления файла: .htaccess или тут без обращения в саппорт хостинга не обойтись? 

  3. Приветствую форумчане. Такая проблема, пытаюсь выполнить 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"}';
    ?>

     

  4. В общем получается что для такого кода:

    document.addEventListener('DOMContentLoaded', function() {
        console.log('test DOMContentLoaded!!!');
        document.qerySelector('#section-slideshow > .Slideshow > .Slideshow__Carousel > button.next').addEventListener('click', function (e) {
          console.log('test click!!!');
          console.log(e);
          });
      });

    Первое сообщение: "test DOMContentLoaded!!!" - выводится, а при клике не кнопку второе: "test click!!!" - уже нет. Ну то есть событие клика этот код не отслеживает. Но повторюсь мне нужно не отследить событие клика, а именно вызвать его. Задача усложняется тем что эти кнопки:

    <button class="flickity-prev-next-button-222 previous" type="button" aria-label="previous"><svg viewBox="0 0 100 100"><path d="M 10,50 L 60,100 L 70,90 L 30,50  L 70,10 L 60,0 Z" class="arrow"></path></svg></button>


    они как бы создаются слайдером,  возможно поэтому я не могу вызвать событие клика по ним к примеру тем же методом trigger для jQuery.

  5. 33 minutes ago, ArtemPitov said:
    
    
    document.addEventListener('DOMContentLoaded', function() {
    	document.qerySelector('.flickity-prev-next-button').addEventListener('click', function (e) {
    		console.log(e)
    	});
    })

     

    Странно, выдает ошибку:

     

    (index):1080 Uncaught TypeError: Cannot read property 'addEventListener' of null
        at (index):1080


    (index):1067 Uncaught TypeError: document.qerySelector is not a function
        at HTMLDocument.<anonymous> ((index):1067)


    Кроме того как я понимаю это код чтобы отследить событие клика? А мне нужно его вызвать, то есть с имитировать событие как будто пользователь кликнул на кнопку.

  6. Вопрос к знатокам JS. Пытаюсь вызвать событие клика на кнопку.
    Однако событие не происходит. Решил проверить правильно ли отобрал кнопку на странице для дальнейшей работы с ней
    В итоге вот такой код:

     

    var previousButton = document.querySelector('button.previous');  
    console.log(previousButton);


     
    Выдает в консоль буквально следующее:

    <button class="flickity-prev-next-button-222 previous" type="button" aria-label="previous"><svg viewBox="0 0 100 100"><path d="M 10,50 L 60,100 L 70,90 L 30,50  L 70,10 L 60,0 Z" class="arrow"></path></svg></button>

     

    И я вот тут что-то запутался. Он мне что вернул? Объект или строку с кодом? Если объект то подходит ли он для вызова события клика на него?

    При этом в документации указанно что метод document.querySelector() - возвращает ссылку на объект типа Element линк:
    https://developer.mozilla.org/ru/docs/Web/API/Document/querySelector

    Но почему тогда я вижу в консоли строку с исходным кодом?

  7. On 3/16/2021 at 4:44 PM, max2020 said:

    а новые отделения руками добавляете? или все автоматически, как у европочты? 

    Здравствуйте. Я делал данную доработку для Scrin, API там как такового нет, данные парсяться с сайта европочты по крону раз в сутки, после этого на странице оформления заказа готовые данные подтягиваются уже из сайта заказчика. К симпле подключились небольшой модификацией в tpl файлах модуля. Если нужно могу вам сделать аналогичную реализацию. Пишите в ЛС.

    • +1 1
  8. Приветствую. Если не найдете исполнителя который возьмется за задачу "целиком" то обращайтесь, могу выполнить интеграцию с внешними сервисами, а также почти все пункты за исключением разве что дизайна. А так советовал бы вам разбить ТЗ на отдельные логические части и искать исполнителя отдельно по каждой из них - быстрее найдете. Ведь тот кто хорошо может сделать дизайн не факт что разбирается в системном администрировании и наоборот.

  9. 2 hours ago, Agatha65 said:

    Надо запомнить раз и навсегда!
    Роботс не запрещает индексирование страницы он запрещает обход этих страниц,.

    Запретит обход страниц ето зло.

    Так появляются страници в серч конзоль - Страница была проиндексирована, несмотря на блокировку файлом robots.txt 

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

    ето делают и ocfilter и filter Vier(там есть настройка с какого уровня добавлят ноиндекс), наверное и другие фильтри тоже.

    Возможно вы правы, однако задача не состоит в том чтобы запретить поисковику обход страниц, а именно в том чтобы дублирующие страницы не появились в поиске, чтобы они не мешали продвижению основных страниц. Ноуиндекс здесь не совсем подходит так как на сколько я знаю работает он только лишь для Яндекса. Ну и кроме того решение о том каким именно образом закрывать страницы не всегда принимает разработчик, как правило есть заказчик, которому задачи могут ставить seo-шники.

  10. 3 hours ago, Soong said:

    однозначно ocfilter

    остальные свои задачи решать можно с помощью robots
     

     

     

    Забавно изначально стоит OCFilter но он как раз эту задачу и не решает, ну тесть не дает никакого признака по которому можно было бы закрыть страницу от индексации. или возможно я не нашел в настройках, но смотрел внимательно. Пока остановил свой выбор на: 

     Там прямо в демке видно что есть признак в url для всех страниц фильтра.

  11. В общем появилась необходимость поставить на сайт такой фильтр товаров, страницы которого точно не попадут в индекс поисковых систем. То есть нужно чтобы хвостовая часть url которая отвечает за выбранные в фильтре опции либо подставлялась через знак # либо же чтобы страницы фильтра можно было промаркировать в url некоторым словом например: /filter/option1/option2/ и так далее. Чтобы в последствии такие ссылки можно было закрыть от индексации в robots.txt при помощи этого признака. Товаров в магазине на данный момент больше 2-х тысяч поэтому нужно чтобы фильтр нормально "тянул" такое количество и не приводил к тормозам магазина. Сейчас смотрю на форуме различные варианты но возможно знающие пользователи сходу смогут подсказать готовое решение.

  12. В общем нашел, статус меняется в файле: catalog/model/checkout/order.php если точнее то меняют его вот эти строки:
     

    // Update the DB with the new statuses
    $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$order_status_id . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");
    
    $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$order_status_id . "', notify = '" . (int)$notify . "', comment = '" . $this->db->escape($comment) . "', date_added = NOW()");
  13. Интересно, а куда в таком случае улетает форма при сохранении заказа в админке? В пути указано: ?route=sale/order/edit значит по идее ее должен контроллер в админке принимать? Каким образом получается что эту форму обрабатывает фронт?

  14. В общем понадобилось совершать определенное действие при изменении статуса заказа, первой мыслю было сделать это в соответствующем методе модели, в файле: admin/model/sale/order.php есть метод getOrder() однако никакого намека на метод edit либо же editOrder в этом файле нет... произвел поиск по слову UPDATE, в итоге единственный UPDATE нашелся в строчке:
    $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");

     

    которая явно не подходит под обновление всего заказа. Короче говоря не пойму, какой именно метод добавляет или обновляет в базу данных информацию о заказе. Думаю ладно поищу нужный метод в контроллере в итоге в файле admin/controller/sale/order.php нашел метод edit() со следующим содержимым:
     

    public function edit() {
       $this->load->language('sale/order');
    
       $this->document->setTitle($this->language->get('heading_title'));
    
       $this->load->model('sale/order');
    
       $this->getForm();
    }

    Ну то есть никаких тебе $this->request->post и опять же нет вызова модели которая обновляет информацию о заказе. Есть правда вызов метода $this->getForm(); но он достаточно большой и там не очевидно как понять что форма была отправлена на сервер, а не скажем просто загружена при открытии заказа на редактирование. Ну и опять же любопытно какой метод все таки обновляет информацию о заказе в бд.

  15. Если нужно бесплатно то только брать дефолтный шаблон и изменять его под себя. Все же более менее хорошие шаблоны будут платными. У дефолтного шаблона единственный + в том что он совместим по умолчанию со всеми модулями.

  16. Собственно сабж. Ну типа на сколько я понимаю 1С устанавливается на ПК пользователя, а не на сервере.. или нет? Ну то есть получается из самой 1С-ки данные можно пихать напрямую в базу Opencart или же через какую то прокладку. Но как передать инфу из движка назад в 1С? Ну например информацию о заказах, статистике продаж или что там еще нужно передавать?
    Для api сервисов это делается путем отправки POST/GET запросов на определенный url. Но куда слать запросы если 1С стоит на компе пользователя? Или я чего то не понимаю и 1С давно в облаках крутится?

     

  17. 2 hours ago, spectre said:

    Опции - горячие клавиши

    Спасибо получилось выставить во вкладке Scintilla Commands правда переход в начало и конец документа получилось поставить только на Ctrl+Shift+Home и Ctrl+Shift+End на Ctrl+Home/Ctrl+End почему то не получается поставить.

  18. Скорее всего в следствии обновления программы, горячие клавиши которые отвечали за быстрое перемещение по документу (как то Ctrl+End, Ctrl+Home, Ctrl+PgDn, Ctrl+PgUp) стали перемещать курсор не в рамках текущей вкладки, а перемещают его в произвольное место какой либо другой из паралельно открытых вкладок. В итоге стало не удобно работать с большими файлами. Может кто то сталкивался с такой проблемой?


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

Important Information

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