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

halfhope

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

    1 750
  • З нами

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

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

  1. Уф..

    Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ?  :oops:

    Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? )))

    Мне кажется, самое удачно решение:

    имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl

    В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl.

    Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю..

     
    У меня в портфолио есть бесплатный модуль для этих целей:
  2. Привет. У меня Хедер очень сильно нагружает сайт согласно модулю

    https://opencartforum.com/files/file/636-opencart-profiler/

     

    Как что можно в хедере выключить, оптимизировать, отключить? (какие запросы к БД)

    ocstore 15512

    дефолтный шаблон

     

    А согласно этого модуля

    https://opencartforum.com/files/file/786-db-log/

     

    много запросов идет от этой строки

    $categories = $this->model_catalog_category->getCategories(0);

     

    Категорий примерно 200.

     

     

    Это можно как-то исправить?

     

    Шапку сайта и модуль категорий можно кэшировать. Примерно так (отрывок из vqMod файла, входящего в состав одного из моих модулей):

    <!-- header menu categories cache -->
    <file name="catalog/controller/common/header.php">
        <operation error="log">
            <search position="before"><![CDATA[$this->data['categories'] = array();]]></search>
            <add><![CDATA[          $categories = $this->cache->get('mcj.common.header.'.md5(json_encode(array((isset($this->request->get['path'])?$this->request->get['path']:false), $this->config->get('config_store_id'), $this->config->get('config_language_id')))));
            if ($categories){
                $this->data['categories'] = $categories;
            }else{]]></add>
        </operation>
        <operation error="log">
            <search position="before"><![CDATA[$this->children = array(]]></search>
            <add><![CDATA[              $this->cache->set('mcj.common.header.'.md5(json_encode(array((isset($this->request->get['path'])?$this->request->get['path']:false), $this->config->get('config_store_id'), $this->config->get('config_language_id')))), $this->data['categories']);
            }]]></add>
        </operation>
    </file>
    <!--  -->   
    
  3. Я и говорю, что подход к версионированию может отличаться, мне удобней поддерживать одну ветку кода. Считаю, что такой подход вполне оправдан, по крайней мере в этот момент развития движка. 

  4. При поддержке модулей для OpenCart 2.x столкнулся с трудностями поддержки модулей, связанного с постоянным обновлением кода движка. Сразу скажу, что Ваш подход к решению проблемы поддержки и версионирования своих модулей может отличаться от моего. Думаю было бы полезно поделиться с сообществом кроссверсионными решениями для поддержки модулей на ветке 2.x и взамен получить то же самое.

     

    1. Загрузка шаблонов и изображения языков в админке [2.0-2.2]. С версии 2.2 при загрузке шаблона убрано указание полного пути к файлу шаблона, вместо этого используется $this->load->view('gallery/gallery'). Пути к изображениям языков тоже подверглись изменению.

    Раздел админки

    if (version_compare('2.2', VERSION) <= 0) {
    
        foreach ($data['languages'] as $key => $language) {
            $data['languages'][$key]['imgsrc'] = 'language/' . $language['code'] . '/' . $language['code'] . '.png';
        }
    
        $this->response->setOutput($this->load->view('gallery/album_form', $data));
    }else{
        foreach ($data['languages'] as $key => $language) {
            $data['languages'][$key]['imgsrc'] = 'view/image/flags/' . $language['image'];
        }
    
        $this->response->setOutput($this->load->view('gallery/album_form.tpl', $data));
    }
    

    Вывод изображения языка в админке:

    <img src="<?php $language['imgsrc']; ?>" title="<?php $language['name']; ?>"> 

    Раздел каталога

    if (version_compare('2.2', VERSION) <= 0) {
        $this->response->setOutput($this->load->view('gallery/gallery', $data));
    }else{
        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/gallery/gallery.tpl')) {
            $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/gallery/gallery.tpl', $data));
        } else {
            $this->response->setOutput($this->load->view('default/template/gallery/gallery.tpl', $data));
        }
    } 

    У модулей каталога вместо $this->response->setOutput будет return.

     

     

    2. Загрузка модели customer_groups в админке [2.0 - 2.2]. C версии 2.0.3.1 модель админки sale/customer_group переехала в customer/customer_group.

    if (version_compare('2.0.3.1', VERSION) <= 0) {
        $this->load->model('customer/customer_group');
        $data['customer_groups'] = $this->model_customer_customer_group->getCustomerGroups();
    }else{
        $this->load->model('sale/customer_group');
        $data['customer_groups'] = $this->model_sale_customer_group->getCustomerGroups();
    }
    

     

    3. serialize vs json_encode в таблице oc_setting при работе не через встроенные модели [2.0 - 2.x]. С версии 2.1.0.0 вместо serialize используется json_encode для столбца value таблицы oc_setting

    <?php
    
    function oc_serialize($value){
        if (version_compare('2.1.0.0', VERSION) <= 0) {
            return json_encode($value);
        }else{
            return serialize($value);
        }
    }
    
    function oc_unserialize($value){
        if (version_compare('2.1.0.0', VERSION) <= 0) {
            return json_decode($value, true);
        }else{
            return unserialize($value);
        }
    }
    
    ?>
    
    • +1 3
  5. Отвечу Вашими же словами:

    Файл не был задет, так как текст исправляется в другом файле.

     

    Моими словами, это как? Я не понял что вы сказали. Суть вообще не в этом. О проблеме было известно заранее, тем не менее, это не помешало повесть ее на меня.

  6. Есть модуль: http://shop-logistic...il.php?ID=22959

    Он работал хорошо, но не знаю из-за чего, может из-за работ на сайте, может из-за добавления IonCube, появилась проблема с отображением вот этой вот страницы, если не выбрать пункт выдачи на карте:

    http://joxi.ru/82QOaKvu6p5grd

     

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

     

    Отправил на почту магазина и в ЛС всех трех аккаунтов запрос реквизитов для возврата средств. 

  7. И так, разбор полетов.

     

    Он сделал перевод под предоплатой

     

    Я его об этом не просил. Была оговорена стоимость 700 рублей, потом, по окончании работ, я сделал скидку по причинам, которые находятся в первом сообщении темы.

     

    но буквально через 4-5 минут ему скинули сообщение о том, что всё готово, проверяйте.

     

    С момента получения доступов до получения сообщения прошел 1:49 минут, что вполне быстро за проектирование/кодинг/тестирование. 

     

    Именно поэтому и остался аванс.

     

    Изначально было оговорено 700 рублей. После окончания работ я сделал скидку в 200 рублей, но сотрудник уже перевел 700. Так что решили в счет аванса, если будем работать далее. 

     

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

     

    Сейчас переведу, не переживайте. Слово я даю только близким людям, здесь речь о профессионализме, не путайте. Забыл, с кем не бывает. Можно просто напомнить, чего никто не сделал.

     

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

     

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

     

     но этот программист то ли испугался того, что не сделает, то ли из-за чего-то ещё начал отказываться.

     

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

     

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

     

    Я не выносил ссору из избы, конфликт был исчерпан. Просто написал свое мнение о пользователе и рекомендации магазину чтобы таких конфликтов не повторилось. Ибо мир и покой на этом форуме - залог успешных сделок. Вполне адекватный поступок, не считаете? 

     

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

     

     

     

    Замечу, что важным условием ТЗ было то, чтобы не было новых ошибок в работе модулей, но данное условие не было выполнено.

     

    - Поменяйте мне колеса, но только чтобы все работало потом нормально. 

    - Конечно, это же колесо, что может сломаться?

    Спустя 1 час и 49 минут:

    - Все готово, проверяйте. Вам персональная скидка в 200 рублей. 

    - Спасибо, но у меня из-за вас двигатель вскипел! А еще, а еще...

     

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

     

    Могли бы просто написать мне в личку для выяснения обстоятельств конфлита с вашим сотрудником. Но вы уже приняли сторону не считаясь с мнением второй стороны, это многое говорит, в том числе и о человеке. 

    • +1 4
  8. Ваша информация не соответствует действительности.

     

     

    Получив работу и найдя повод  исправить за те же деньги все ошибки "за одно" ?

     

    Продолжайте в том же духе.Ваш магазин точно будет изгнанником на форуме среди тех кто умеет и может.Останутся школьники и кидалы.

     

    Нет, том, деньги 200 рублей не вернул все еще, забыл) Серьезно забыл, проектов куча) Сейчас еще напишу)

  9. В кратце:

    • нужно создать доп поле таблицы с отзывами, например, review_ip 
    • изменить функцию модели, которая добавляет отзыв. А именно добавить добавление IP публикующего в столбец review_ip
    • изменить админку (добавить вывод IP адреса из таблицы)

     

    Делов на  20 минут, если надо, то обращайтесь. Это не касается отзывов SEO CMS, там этот функционал вроде есть, могу ошибаться. 

  10. <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" <?php echo ($option['product_option_value'][0] == $option_value) ? 'checked="checked"' : ''; ?> />
    

    Вот код, который добавлен:

    <?php echo ($option['product_option_value'][0] == $option_value) ? 'checked="checked"' : ''; ?>
    

    Вам нужно еще вызвать триггер click по первому элементу, с этим помочь не могу. Так же задачу можно решить на javascript, без применения PHP.

  11. 24.06.2016. Работа над тем, что я описал выше все еще в процессе.

    • Добавлены хотфиксы для поддержки модуля на версии 2.2.
    • Исправлен баг в админке при котором только что созданный альбом отсутствовал на странице списка галерей.
    • +1 1
  12. в catalog/model/catalog/product.php добавляем public функцию getProductsLastModified, в ней пишем:

    $query = $this->db->query("select date_modified from " . DB_PREFIX . "product order by date_modified asc limit 1");
    return $query->row['date_modified'];
    

    Допустим мы выводим на главной, для этого нужно в контроллере главной страницы запросить данные из модели (из созданной функции) и передать в шаблон:

    $this->load->model('catalog/product'); //Подгружаем модель, если она не загружена
    
    $data['last_modified'] = $this->model_catalog_product->getProductsLastModified(); //Передаем данные в шаблон
    

    А в home.tpl выводим во так:

    <?php echo $last_modified; ?>
    

    Для версий 1.5 замените $data['last_modified'] на $this->data['last_modified']

     

    Вроде правильно. 

    • +1 2
  13. Добрый день. Это не ошибка PHP, а значит в лог она записываться не будет. Это неправильный CSS код, который добавляет принудительную полосу прокрутки не к тому элементу, к которому надо. Найдите в stylesheet.css overflow-y:scroll; если он там есть и вырежте. Затем в этом же файле найдите html и вставьте туда overflow-y:scroll; либо вообще уберите его из этого файла.

     

    А вот вам ответ по поводу пробела в шапке сайта. 

  14. Всем добрый день  :-)
     
    Пользователь @riderclub обратился за помощью, ему нужно было исправить ошибку БД при оформлении заказа. Аргументировал тем, что мы с ним из одного города и все такое. Я, как добрый самаритянин, решил помочь бесплатно т.к. 500 рублей (мой минимум за задачу) за решение данной проблемы - много. Написал ему решение, чтобы он сам все сделал. Сам делать он не захотел и решил заплатить 500 рублей за исправление ошибки и задачу.
     
    Я решил, почему бы и нет) Исправить ошибку и добавить новые поля в модуль доставки и оплаты. Стоимость работ я оценил в 700 рублей. После решения задачи написал ему:
     

    Все готово, проверяйте.
     
    Ошибку при оформлении заказа исправил. Добавил и настроил настраиваемые поля минимальную и максимальную стоимости заказа на страницы настроек указанных модулей (Оплата при доставке, ShopLogistics - доставка в пункты самовывоза). 
     
    Итого к оплате 500 рублей. 
     
    Сделал быстро, нашел полезным некоторые моменты, поэтому скидка)

     
    Даже скидку сделал т.к. решил добавить аналогичные поля в свой модуль Простой настраиваемой доставки) Но клиент уже заплатил 700 рублей. Решили, что этой пойдет в счет следующих доработок. Ничего не предвещало беды. 
     

    Здравствуйте, нашли проблему, теперь в модуле оплаты альфа.банк эквайринг вылазит ошибка о том, что сумма отсутствует:http://joxi.ru/4Ak8YqjcbowDrq

     
    Я сначала подумал, что просто попросит исправить ошибку, но нет. Он прислал скрины с кучей ошибок, которые никак не связаны с тем, что я делал. В его тоне было что-то не так, как будто я был обязан ему исправить эти ошибки, мне это не понравилось. Затем он сменил аккаунт на @Mbs123 потому что его заминусили и начал писать оттуда. 
     

    Здравствуйте, пишу Вам от имени riderclub. Вы мне недавно дорабатвали сайт и у меня возникли некоторые проблемы после настройки, а именно:

     
    Как мы все понимаем, внесенные мною модификации никак не связаны ни с одним из указанных им разделов. Сначала я предложил убрать указанные ошибки за деньги. Но не тут то было, клиент считал, что я виноват во всех его бедах, что после меня все "посыпалось".
     
    Затем я убрал свои модификации попросив снова проверить на наличие ошибок снова. Но он не воспользовался случаем и упрямо стоял на своем. От меня последовал вполне адекватный ответ на такую ситуацию:
     

    Вернул модификации на место. Вижу Вы не воспользовались случаем все проверить. Извините, с Вами работать больше не могу, увы. Если Вы считаете, что из-за меня все полетело, то прошу написать об этом на форуме в разделе "Отзывы о заказчиках". 

     
    Его ответ
     

    Стоп, был обговорён специально с Вами вопрос, чтобы всё работало, в итоге выполнили ТЗ на половину только с одним заданием справились. Прошу вернуть 200 рублей.

     
    Мой
     

    Я выполнил все условия ТЗ, внесенные модификации никак не могли повлиять на появление новых ошибок. Ок, не вопрос, завтра переведу.

     
    Но он упрямо стоял на своем, словно Гендальф преградивший путь Логике. После недолгой эпичной переписки мой мозг, впервые за 5 лет, просто не выдержал и взорвался:
     

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

     
    Это первый и, надеюсь, последний случай, когда я обозвал клиента. В свое оправдание ничего не могу сказать, что есть - то есть. Затем последовал интересный "прощальный" диалог: 

    Он:
     

    Такое впечатение, что это ты мне заплатил.

     
    Я:
     

    Правильно, так все и получается, от такого человека за 200 рублей избавиться, это очень дешево. 

     
    Помимо этого этот пользователь склонен общаться на форуме с самим собой, с разных аккаунтов, и брать у себя же задачи на выполнение (тема удалена с форума т.к. не несет смысловой нагрузки).

  15.  

     

    сохранить при изменениях.

     

    Это уже не нормально -> когда вы его получаете, генерируете данные, проверяете на изменения и потом сохраняете. 

     

    По сути кэш нужен для того чтобы избежать ресурсоемких, повторяющихся или медленных функций. Т.е. если данные из кэша были получены, то нет необходимости запускать функцию получения данных. Если же кэш получили пустым, то запускаете функцию и ее результат сохраняете в кэш. Инвалидация кэша должна происходить только по времени, установленном в классе кэширования, а не по изменению данных.

     

    А так, да, можно использовать кэширование в конструкторах и деструкторах.

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

Important Information

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