• Как провести рефакторинг функции js?

    @AndrewRusinas
    Как минимум избавиться от var'ов. В идеале разбить на десяток-другой мелких функций с понятными названиями с ограниченным функционалом.

    Как пример:
    String(current).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')

    Повторяется многократно, можно вынести.

    price_current.text(updated + ' ₽');

    Аналогично, можно создать функцию setCurrentPriceText().

    И так далее. Всякие формулы, на основе которых формируется цена, etc etc
    Ответ написан
    Комментировать
  • Как провести рефакторинг функции js?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Комментировать
  • Как сделать ссылку на Viber?

    Middle_Pudge
    @Middle_Pudge
    Дело в том что десктопное и мобильное приложение Viber открывается по разным ссылкам, что создает определенные сложности при добавлении такой ссылки на сайт. Поэтому потратьте 2 минуты чтобы прочитать и понять текст ниже) Для мобильных устройств используется такой подход формирования ссылки:
    <a href="viber://add?number=380950000000">Написать в Viber</a>

    Для ПК – такой:
    <a title="Должен быть установлен Viber для ПК" href="viber://chat?number=+380950000000">Написать в Viber</a>


    Для того, чтобы определить устройство при помощи PHP, в самом простейшем случае можно воспользоваться простейшей функцией, которая определяет USER_AGENT устройства, а затем, в зависимости от того, опередила ли функция устройство как мобильное или нет, показывать ту или иную ссылку.
    <?php function check_mobile_device() { 
        $mobile_agent_array = array('ipad', 'iphone', 'android', 'pocket', 'palm', 'windows ce', 'windowsce', 'cellphone', 'opera mobi', 'ipod', 'small', 'sharp', 'sonyericsson', 'symbian', 'opera mini', 'nokia', 'htc_', 'samsung', 'motorola', 'smartphone', 'blackberry', 'playstation portable', 'tablet browser');
        $agent = strtolower($_SERVER['HTTP_USER_AGENT']);    
        foreach ($mobile_agent_array as $value) {    
            if (strpos($agent, $value) !== false) return true;   
        };     
        return false; 
    };?>

    Расположить функцию, можно, например в самом начале страницы, перед 'doctype' или вынести в отдельный файл и там же подключить его.

    После этого, в месте где будет выводиться ссылка на Viber используйте такую проверку:
    <? if(check_mobile_device()) :?>
    	<a title="Viber" href="viber://add?number=79851198793"></a>              
    <? else : ?>
    	<a title="Viber" href="viber://chat?number=+79851198793"></a>
    <? endif; ?>

    Теперь, если человек зашел с ПК, то ему покажется ссылка для десктопного приложения, а если с мобильного устройства, то ссылка для смартфона или планшета.
    Ответ написан
    Комментировать
  • Как загружать блок div при определенном условии?

    @srjk94
    На php такое условие сделать не получится.
    На jquery можно написать что то вроде такого
    $(document).ready(function(){
    if(window.innerWidth > 1200){
      $('.responsive-menu-items').remove();
    }
    });
    Ответ написан
    Комментировать
  • Как загружать блок div при определенном условии?

    mrhard
    @mrhard
    web разработчик
    jQuery:

    function myresize(){
        
        $('.myblock').css('display',($(window).width()<1200)?'block':'none');
        
    }
    $(document).ready(function(){
                $(window).resize(function(){
                    myresize();
                })
                myresize();
            });


    или CSS

    .myblock{
        display: none;
    }
    @media (max-width: 1200px) {
      .myblock{
        display:block;
      }
    }
    Ответ написан
    Комментировать
  • Как спарсить заголовки excel через php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Универсального решения в данном случае нету. Так как всё чем вы оперируете это ячейки, строки, столбцы.
    Тут только применять логику из разряда, а как человек определяет где начинаются заголовки и данные?
    Например что это N-подряд ячеек в строке жирным шрифтом без объединения за которым следует поток данных в таком же формате и тд.
    И на основании этого уже пишем алгоритм на РНР.
    Ответ написан
    Комментировать
  • Как переписать повторяющиеся конструкции if?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Можно так:
    <?php
    if (!empty($color_names)) echo("let arr = ".json_encode($color_names).", thisClass = 'color';\naddList(arr, thisClass);\n";
    if (!empty($mech_names)) echo("let arr = ".json_encode($mech_names).", thisClass = 'mech';\naddList(arr, thisClass);\n";
    if (!empty($upholstery_names)) echo("let arr = ".json_encode($upholstery_names).", thisClass = 'upholstery';\naddList(arr, thisClass);\n";
    ?>

    Можно и функцию использовать, но при обращении к несуществующий (непроинициализированной) переменной нужно будет избавляться от ошибки.
    Ответ написан
    Комментировать
  • Как переписать повторяющиеся конструкции if?

    просто вынеси это в функцию и вызывай ее где надо
    что то типа того
    function functionName($upholstery_names, $name) {
    <?php if (!empty($upholstery_names)) { ?>
    let arr = <?= json_encode($upholstery_names); ?>,
    return addList(arr, $name);
    <?php } ?>
    }
    Ответ написан
    Комментировать
  • Как переписать повторяющиеся конструкции if?

    @AleksRap
    написать функцию с двумя аргуметами и вызывать ее
    Ответ написан
    Комментировать
  • Как оптимизировать данный код php + js?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    1)isset($mech_names) && $mech_names != "" можно заменить на !empty($mech_names)
    2) если в шаблонах приходится использовать чистый php, а не шаблонизатор, то надо использовать Альтернативный синтаксис управляющих структур для нормальной читаемости.
    3) чтобы не гонять each на каждый $mech_name1, то можно находить элемент по value (примеры).

    Фильтровать массивы на наличие пустых элементов можно этой функцией без колбека на бекенде до передачи шаблону, чтобы не дублировать эту проверку везде.
    Ответ написан
    Комментировать
  • Как реализовать импорт xls в админке?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Не совсем понятно, что у вас уже сделано, (я так понимаю, что на фронтенде вы сделали соответствие "колонка в excel файле => колонка в таблице базы данных"), но алгоритм должен быть такой:
    1) на фронтенде вы должны хранить не только человекопонятное название колонки, но и ее код из файла (A-Z) в скрытых свойствах, нп. data-атрибутах, т.е. вам нужно заранее считать лист из excel файла и спарсить оттуда названия колонок.
    2) Когда выставите соответствие колонок из файла и колонок из таблиц, то посылаете запрос на бекенд, в котором этот массив соответствий проверяется на реализуемость, потом поячеечно читаете excel файл, подготавливаете sql выражение и записываете в базу. Для ускорения вставки можно использовать batch insert.
    PS. PHPExcel уже устарел и не рекомендуется к использованию, возьмите PHPSpreadsheet.
    Ответ написан
    Комментировать
  • Как увеличить только целую часть суммы?

    isset89
    @isset89
    Врёшь, тебе нравится
    ROUND(price*1.03, 0);
    Тип данных должен быть decimal
    Ответ написан
    Комментировать
  • Как увеличить только целую часть суммы?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    SELECT CEILING( 71207.0000 * 1.03), FLOOR( 71207.0000  * 1.03 )

    73344 73343

    А если дословно:
    SELECT FLOOR( 71207.0000 ) + FLOOR( FLOOR( 71207.0000 ) * 0.03 )

    73343
    Ответ написан
    Комментировать
  • Как увеличить только целую часть суммы?

    solotony
    @solotony
    покоряю пик Балмера
    для начала ХРАНИТЬ ДЕНЕЖНЫЕ СУММЫ ТОЛЬКО BIGINT в минимальных единицах (копейки, центы)
    Ответ написан
    Комментировать
  • Как ускорить отправку письма при заказе?

    @dimuska139
    Backend developer
    Это надо делать через очередь. То есть человек жмет, грубо говоря, кнопку "отправить письмо", на сервере запускается задача отправки письма, отдается обратно ответ, что письмо будет отправлено, а сама отправка выполняется в фоновом режиме.
    Погугли насчет Gearman.
    Ответ написан
    Комментировать
  • Как вытащить данные при вложенном запросе?

    erge
    @erge
    Примус починяю
    У вас таблица oc_product внутри подзапроса, поэтому сначала нужно вывести там, а уже потом "сверху":

    SELECT
        name,
        sku,
        CONCAT('https://домен/', IF(ua2.keyword IS NULL,'',CONCAT(ua2.keyword, '/')), IF(ua3.keyword IS NULL,'',CONCAT(ua3.keyword, '/')), IF(ua4.keyword IS NULL,'',CONCAT(ua4.keyword, '/')), ua1.keyword) AS url
      FROM (
        SELECT
            name,
            p.sku,
            CONCAT( 'product_id=', p.product_id ) AS product_query,
            CONCAT( 'category_id=', pc.category_id ) AS category_query,
            CONCAT( 'series_id=', ps.series_id ) AS series_query,
            CONCAT( 'subcategory_id=', psc.subcategory_id ) AS subcategory_query
          FROM `oc_product_description` pd
          LEFT JOIN oc_product p ON (p.product_id=pd.product_id)
          LEFT JOIN oc_product_to_category pc ON (pc.product_id=p.product_id)
          LEFT JOIN oc_product_to_series ps ON (ps.product_id=p.product_id)
          LEFT JOIN oc_product_to_subcategory psc ON (psc.product_id=p.product_id)
          WHERE p.date_available <= NOW()
            AND p.status = '1'
      ) pd
      LEFT JOIN oc_url_alias ua1 ON ( pd.`product_query` = ua1.`query` )
      LEFT JOIN oc_url_alias ua2 ON ( pd.`category_query` = ua2.`query` )
      LEFT JOIN oc_url_alias ua3 ON ( pd.`series_query` = ua3.`query` )
      LEFT JOIN oc_url_alias ua4 ON ( pd.`subcategory_query` = ua4.`query` )
    ;


    PS: и форматируйте запросы нормально, читать будет удобнее.
    Ответ написан
    Комментировать
  • Как записать в массив данные из базы при помощи Yii2?

    kawabanga
    @kawabanga
    ->asArray();
    Ответ написан
    Комментировать
  • Как спрятать окно при клике вне его JQuery?

    s_panteleev
    @s_panteleev
    25 yo, Yaroslavl
    https://codepen.io/anon/pen/XwxOaY

    $(document).on('click', function(e) 
    {
        var container = $('.menu-mobile');
        if (!container.is(e.target) && container.has(e.target).length === 0) 
        {
            container.hide();
        }
    });
    Ответ написан
    2 комментария