Задать вопрос
  • Я начинающий и в процессе работы у меня довольно часто происходят ошибки в коде, это бесит, буквально каждую минуту косячу и туплю, как быть?

    sim3x
    @sim3x
    Постоянно гуглю ошибки, лезу в документацию
    похвально

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

    Когда это закончится?
    никогда

    Сколько лет пройдёт
    Пройдет после смерти
    А если у вас будет много кода, которым пользуются, то и смерть не будет гарантировать ничего

    Чтоб ты всё понимал, что происходит и вообще ошибок не было никогда
    недостижимо

    Замечу, что ошибки должны со временем меняться и ошибки, которые вы допускаете сейчас через год у вас не должны появляться
    Вам нужен опыт и наработка памяти на стандартные конструкции
    Ответ написан
    Комментировать
  • Как в битриксе через API заполнить базовую цену товара?

    @run182 Автор вопроса
    Сергей
    Попробуйте перед CPrice::Add добавить
    $cataloProductClass = new CCatalogProduct;
    $cataloProductClass->Add(array(
        "ID" => $PRODUCT_ID,
        'QUANTITY' => 0,
    ));
    Ответ написан
    Комментировать
  • Наверняка уже спрашивалось не раз, но все же, как?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Для начала -- добавить remote в репозиторий на другом компе:
    git remote add <имя remote> <URL>
    Если история на github совпадает с локальной историей, просто короче, то можно сразу пушить:
    git push <имя remote> <имя ветки>
    Если нет -- надо выкачивать и мёржить:
    git fetch <имя remote> <имя ветки>
    git merge <имя remote>/<имя ветки>
    <магия разрешения конфликтов>

    после чего можно пушить обратно.
    Ответ написан
    1 комментарий
  • Какую кодировку нужно указать для file_get_contents?

    Kasperenysh
    @Kasperenysh
    Рецидив в особо острой форме))
    urlencode - вам нужно закодировать кирилицу в адресе...

    $status = "Ого: 1";
    $urll= "http://api.vk.com/method/status.set?group_id={id}&text={$status}&access_token={$token}&v=5.95";
    $url= json_decode(file_get_contents(urlencode($urll)));
    Ответ написан
    6 комментариев
  • Как заполнить массив текстовыми значениями: 0001, 0002, ..., 9999?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Функция str_pad дополняет входную строку до нужной длины любым символом, слева и/или справа.

    Этого достаточно для решения поставленной задачи.

    $resultArray = [];
    
    for ($i = 1; $i <= 9999; $i++) {
      $resultArray[] = str_pad($i, 4, '0', STR_PAD_LEFT);
    }
    
    var_dump($resultArray);


    пояснение функции
    str_pad(
      $i,           // текущее число (оно будет приведено к строке автоматически)
      4,            // дополнить до 4-х символов
      '0',          // нулями
      STR_PAD_LEFT  // слева
    )


    С циклом, надеюсь, знакомы.
    Ответ написан
    6 комментариев
  • Получение значений полей в php созданных через JS?

    @andreysuha
    Что то знаю
    ajax с фронта отправляешь на сервере ловишь и используешь.
    Ответ написан
    7 комментариев
  • Как правильно записать код в переменную?

    DevMan
    @DevMan
    <?php 
    
    $var = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
    echo $var;
    ?>
    Ответ написан
    3 комментария
  • Зачем нужны абстрактные классы (PHP)?

    У разных языков по разному. Например в Java можно реализовывать кучу интерфейсов, но нельзя реализовать множественное наследование не больше 3-ех наследников и с помощью интерфейсов решают это.

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

    Абстрактный класс нужен, когда нужно семейство классов, у которых есть много общего. Конечно, можно применить и интерфейс, но тогда нужно будет писать много идентичного кода.

    Пример: Абстрактный класс заведомо не будет запрошен как объект. К примеру абстрактный класс - Транспорт: Но все его наследники будут Автомобилем, краном, лодкой, самолет и т.д. Например вы заведомо знаете, что весь транспорт будет двигаться. И вы объявляете абстрактный метод(движение) в абстрактном классе, который нужен будет 100% всем наследникам т.е. без движения это уже не транспорт и новый наследник обязан будет реализовать это. В самом же абстрактном классе, есть другие поля и свойства, которые будут унаследованы. Ну например мощность двигателя(очень грубо), или то что их роднит.
    Ответ написан
    2 комментария
  • Абстрактные классы и интерфейсы - когда применять одно или другое?

    @Mercury13
    Программист на «си с крестами» и не только
    Всё зависит от того, что вы хотите. И вообще, с «опциональной» функциональностью есть много вариантов (для простоты пишу на Java).

    1. «Типа по ООП».
    class Animal {}
    class Dog extends Animal {
       public void doSound() {}
    }

    Недостаток: если у нас есть собака со звуком, кошка со звуком и утка со звуком и надо выдать звук, если возможно — фигвам!

    2. Реализовать интерфейс Vocal
    interface Vocal {
      void doSound();
    }
    class Animal {}
    class Dog extends Animal implements Vocal {
       @Override
       public void doSound();
    }

    В таком случае
    if (animal instanceof Vocal)
      ((Vocal)animal).doSound().

    Впрочем, такие преобразования типа — тоже слегка не по ООП.

    3. Не в курсе, возможно ли в Java, напишу это на C++. Protected doSound в Animal и public в Dog.
    class Animal {
    protected:
       void doSound();
    };
    class Dog : public Animal {
    public:
      using Animal::doSound;
    };

    Недостаток в том, что если всё же придётся организовывать общую функциональность — то приходится писать шаблон «Public Морозов».
    Пример: у всех компонентов VCL есть protected __property Caption. И в 99% случаев этого хватает: заглавие отображается где-то — вытягивай наружу. У меня возник вопрос с автоматическим переводом форм. Либо подключай интроспекцию, либо Public Морозов (в Delphi/Builder есть интроспекция и доп. право доступа published, подключающее свойство к ней). Я не стал мучиться и сделал второе.
    Также задача несколько неудобна, когда библиотека долго живёт и развивается: с каждой новой версией приходится выносить наружу всё новые и новые свойства
    Плюсы? Просто, малый расход памяти и удобно писать специальные задачи. Например, свойство Hint protected, но действует; если всплывающая подсказка какая-нибудь динамическая и снаружи менять нельзя — меняй на здоровье изнутри.

    ЗЫ. Пришёл с работы, то же самое на Java.
    public class Dog extends Animal {
        @Override
        public void doSound() { super.doSound(); }
    }

    Ну а роль Морозова будут играть API интроспекции и «морозовский» класс в том же пакете. Все мы забываем, что protected покрывает более жёсткое package, т.е. из того же пакета тоже можно.
    public static void main(String[] args) {
            Animal an = new Animal();
            an.doSound();   // protected!
        }


    4. Может ли издавать звук?
    class Animal {
    public boolean isVocal() { return false; }
    public void doSound() {}
    }


    5. Вернуть интерфейс Vocal; если null — животное молчит.
    class Animal {
    public Vocal getVocal() { return null; }
    }


    Что выбирать — однозначного ответа нет. Насколько много будут наследовать от этого класса, насколько много будет общих задач и насколько будет перегруженной документация… Допустим, если мы не имеем доступа к классу Animal, заманчиво второе. А если Vocal — не интерфейс, а абстрактный класс, то пятое.
    Ответ написан
    Комментировать
  • Как я могу получить день недели, если известно количество секунд от начала эпохи?

    SagePtr
    @SagePtr
    Еда - это святое
    Если эпоха абстрактная и календарь абстрактный - то нацело разделить количество секунд от начала эпохи на число секунд в сутках (получить количество полных суток) и взять от них остаток от деления на число дней в неделе. А потом смотреть, какой день недели выпадает начало эпохи и от этого дня и считать.
    Ответ написан
    Комментировать
  • Как сделать тяжелый импорт из excel 800к товаров?

    syschel
    @syschel
    freelance/python/django/backend
    1. У вас именно EXEL файл или всётаки CSV который вы открываете на десктопе с помощью экселя?
    2. Если всётаки EXEL файл. Там слишком много всего нагорожено, на вроде вёрсток и формул или голые таблицы?
    3. Если всётаки голые таблицы. Вы можете делать именно CSV файл?

    Если данные будут в CVS формате, то можно всё загрузить средствами MYSQL и не использовать для обработки PHP или его библиотеки. Тогда результат будет в разы выше, чем если перебирать с помощью ПХП и потом кормить в MSQL

    Когда я в своё время сталкивался с проблемой загрузки файла товаров в базу, там было несколько миллионов единиц, то оптимальным стало именно такое решение > LOAD DATA

    Кусок моего старого MySQL кода, для наглядности
    // Загружаем кашерный файл
    LOAD DATA LOCAL INFILE '/srv/cms_cpa/files/adimport_items.csv' INTO TABLE adimport_tmp CHARACTER SET utf8 FIELDS TERMINATED BY '|' ENCLOSED BY "'" LINES TERMINATED BY '\n' IGNORE 1 LINES (id_adimport,article,available,currencyId,delivery,description,id,name,oldprice,param,picture,price,url,vendor,advcampaign_id,advcampaign_name);
    
    // Загружаем только нужные поля (!!!)
    LOAD DATA LOCAL INFILE '/srv/cms_cpa/files/adimport_items.csv' INTO TABLE adimport_tmp CHARACTER SET utf8 FIELDS TERMINATED BY '|' ENCLOSED BY "'" LINES TERMINATED BY '\n' IGNORE 1 LINES (id_adimport,@ISBN,@adult,@age,article,@attrs,@author,available,@barcode,@binding,@brand,@categoryId,@country_of_origin,currencyId,delivery,description,@downloadable,@format,@gender,id,@local_delivery_cost,@manufacturer_warranty,@market_category,@model,@modified_time,name,oldprice,@orderingTime,@page_extent,param,@performed_by,@pickup,picture,price,@publisher,@sales_notes,@series,@store,@syns,@topseller,@type,@typePrefix,url,vendor,@vendorCode,@weight,@year,advcampaign_id,advcampaign_name,@deeplink);
    
    // Все поля
    LOAD DATA LOCAL INFILE '/srv/cms_cpa/files/adimport_items.csv' INTO TABLE adimport_tmp CHARACTER SET utf8 FIELDS TERMINATED BY '|' ENCLOSED BY "'" LINES TERMINATED BY '\n' IGNORE 1 LINES (id_adimport,ISBN,adult,age,article,attrs,author,available,barcode,binding,brand,categoryId,country_of_origin,currencyId,delivery,description,downloadable,format,gender,id,local_delivery_cost,manufacturer_warranty,market_category,model,modified_time,name,oldprice,orderingTime,page_extent,param,performed_by,pickup,picture,price,publisher,sales_notes,series,store,syns,topseller,type,typePrefix,url,vendor,vendorCode,weight,year,advcampaign_id,advcampaign_name,deeplink);

    Ответ написан
    Комментировать
  • Куда можно обратиться в США?

    vicodin
    @vicodin
    Имею некоторый опыт
    Успокойтесь и не занимайтесь фигней. Надо работать по трекеру или предоплате, ваши угрозы толко рассмешат его.
    Ну или сгоняйте в США обратитесь там в суд, если у вас идёт речь о сотнях тысяч долларов и есть официальный договор на оказание услуг.
    Ответ написан
    Комментировать
  • Как добавить много AJAXа на страницу в проект на PHP+jQuery?

    Возможно стоит посмотреть в сторону https://github.com/gwendall/way.js. Реализует two-way databinding прямо как в ангуляре.
    Ответ написан
    Комментировать
  • Как выделить все символы русского алфавита на странице, при условии, что атрибуты некоторых элементов могут содержать его?

    @kudis
    Bitrix developer
    Для Вашего примера работает вот такой вариант:
    function search_rus_symbol()
    {
        var arTexts = document.getElementById('www1').innerHTML.match(/>([^\<]*)/ig);
        var arItems = [];
        arTexts.forEach(function(item, key){
            arItems[key] = item.replace(/([А-Яа-я]+)/mg, '<font color="red">$1</font>');
        });
        arTexts.forEach(function(item, key){
            document.getElementById('www1').innerHTML = document.getElementById('www1').innerHTML.replace(item, arItems[key]);
        });
    }
    Ответ написан
    Комментировать
  • Как выделить все символы русского алфавита на странице, при условии, что атрибуты некоторых элементов могут содержать его?

    lidacriss
    @lidacriss
    wtf
    попробуйте такой "костыль":
    let t = document.getElementById('www1');
    // достаем потенциальные текстовые узлы
    textNodes = t.innerHTML.match(/(>[^<>]*?)([а-яА-Яё]+)([^<>]*?<)/igm) || [];
    // проходим по каждому регуляркой в цикле
    textNodes.forEach(function(tNode){
      let repl = tNode.replace(/([а-яё]+)/igm, '<mark>$1</mark>');
      t.innerHTML = t.innerHTML.replace(tNode, repl);
    });
    Ответ написан
    2 комментария
  • Как выделить все символы русского алфавита на странице, при условии, что атрибуты некоторых элементов могут содержать его?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Нужно рекурсивно обойти всё DOM дерево и рассматривать только текстовые узлы. Регуляркой заменять один-или-несколько-подряд символов из кириллического алфавита (+пробелы, пожалуй) на них же, в обёртке из тега форматирования.
    Примерно так
    function replacer(el){
      var i, node, span;
      if(el.hasChildNodes()) {
        for(i=0; i<el.childNodes.length; i++) {
          node = el.childNodes[i];
          if(node.nodeType === Node.ELEMENT_NODE) {
            if( !!~['SCRIPT','NOSCRIPT'].indexOf(node.nodeName)) continue;
            replacer(node);
          } else if( node.nodeType === Node.TEXT_NODE) {
            if(node.nodeValue.match(/^\s+$/)) continue;
            span = document.createElement("span");
            span.innerHTML = node.nodeValue.replace(/([а-яА-Я]+)/ug, '<i>$1</i>');
            el.insertBefore(span, node);
            el.removeChild(node);
          }
        }
      }
    }
    
    replacer(document.body);

    Тут для простосты схалтурил и вообще каждый текстовый узел заменяю на <span>, чтобы просто innerHTML ему заменить.

    Fiddle
    Ответ написан
    Комментировать
  • Автодеплой git от пользователя apache возможен?

    SagePtr
    @SagePtr
    Еда - это святое
    Да, через вебхук (если работаете с репозиторием напрямую через SSH, и вебхуки нет возможности использовать - то дёргаете внутри обычного хука нужный вам URL через wget или curl и получится самодельный вебхук, но без пейлоада)
    Ответ написан
    3 комментария
  • Как сделать подстановку из массива с ключом из регулярного выражения?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    $text = preg_replace_callback("/\{a (\d+)\}/", function($matches) use($routes) {
      return "<a href=\"".$routes[$matches[1]]."\">";
    }, $text);
    Ответ написан
    Комментировать