• Bootstrap col-xs-* не работает?

    @koanvl
    В Bootstrap 4 нет col-xs-* (Пруф)
    Ответ написан
    Комментировать
  • Как прямо в корзине поменять у всех товаров тип цены?

    AlexanderKs3
    @AlexanderKs3
    1. Стандартная реализация БУС выводит наиболее выгодную цену в зависимости от прав пользователя, задачи с переключением цен как правило не возникает;
    2. Если требуется показывать клиенту только одну, назначенную ему цену, достаточно указать в настройках комплексного компонента bitrix:catalog параметр PRICE_CODE - наименование типа цены;
    3. Если очень хочется переключатель в корзине, придется получить объект корзины пользователя для текущего сайта, после чего обойти товары (BasketItems), сделав им setFields для параметров CURRENCY и (возможно) PRICE, после чего сохранить корзину и получить ее стоимость. Возможно, вам поможет этот блог.

    На самом деле, идея со сменой типа цены в корзине - бредовая. А вот п.2 делал, чтобы посетитель видел только свою, партнерскую цену.
    Ответ написан
    2 комментария
  • Почему не работают команды, установленные через npm install?

    @Praytic Автор вопроса
    Не знаю в чем была проблема, но четвертая реинсталяция с перезагрузкой решила проблему. Очень странно.
    Ответ написан
    Комментировать
  • Что делает команда git pull 2>&1?

    @Masterme
    это имеет отношение не конкретно к гиту, а к консольным командам вообще
    http://stackoverflow.com/questions/818255/in-the-shell-what-is-21
    Ответ написан
    Комментировать
  • Почему не срабатывает git commit в shell_exec()?

    vekov
    @vekov Автор вопроса
    Для отладки стоит использовать такую схему:

    $git_branches = exec('git push origin master:'.$_GET["REMOTE"].' 2>&1', $stdin, $stderr);


    То есть shell_exec меняем на exec, и добавляем "2>&1"; Тогда сможем видеть ошибки.

    Сама команда commit не работала, потому что в конфиге был не верно задан пользователь. И потому что у пользователя было не достаточно прав. Назначил его владельцем папки .git. Проблема решилась
    Ответ написан
    Комментировать
  • Почему не работает LOGIC OR Битрикс GetList?

    megafax
    @megafax
    web-программист
    [
           "LOGIC" => "OR",
           [
                  "PROPERTY_LINK1" => $arIds,
                  "PROPERTY_LINK2" => $arIds,
                  "WF_PARENT_ELEMENT_ID" => $arIds
           ]
        ]

    Вот так имелось ввиду?
    Ответ написан
    3 комментария
  • Проблема с explode и in_array в PHP, почему может не работать?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    вот это:

    Потом вызываю
    $newsCategory = explode( ',' , $newsCategory );

    замени на:

    if (is_array($newsCategory)) die('Интересно зачем я в explode передаю массив, вместо строки вторым параметром?');
    $newsCategory = explode( ',' , $newsCategory );
    Ответ написан
    9 комментариев
  • Как вызвать класс как функцию?

    KorniloFF
    @KorniloFF
    Работаю по font-end / JS
    class SumAB {
    	function __construct($a,$b) {
    		$this->a= $a;
    		$this->b= $b;
    		$this->sum= ($a + $b) . '';
    	}
    	function __toString () {
    		return $this->sum;
    	}
    };
    
    $sum = new SumAB(1,2);
    echo $sum; // 3
    Ответ написан
    Комментировать
  • Как отнять число у значения в таблице MYSQL?

    @Yan-s
    UPDATE orders SET redeemed = '$change',  amount = amount - '$sum' WHERE id = '$id'
    Ответ написан
    Комментировать
  • Как получить id всех товаров на 1c bitrix?

    @makedev
    https://dev.1c-bitrix.ru/api_help/iblock/classes/c...
    Возвращает элементы инфоблоков по фильтру
    https://dev.1c-bitrix.ru/api_help/catalog/classes/...
    Возвращает элементы товарного каталога (модуль catalog)

    Вариант использования под конкретно вашу задачу:
    CModule::IncludeModule('iblock');
    $iIblockID = 1; //тут вставить ИД инфоблока
    /*Получаем все ИД товара*/
    $resIblock = CIBlockElement::GetList(
       array('ID' => 'ASC'), 
       array(
       'IBLOCK_ID' => iIblockID  
       ),
       false, 
       false,
       array("ID")
    );
    
    while($arID = $resIblock->Fetch())
        CIBlockElement::SetPropertyValuesEx($arID['ID'], iIblockID , array('ARTICLE' => $arID['ID'])); //присваиваем коду свойству ARTICLE ИД элемента. вместо ARTICLE поставьте свой код свойства

    Вот так можно заменить артикул на ИД в битриксе. Но обращу внимание на то, что способ ресурсозатратный. Каждое изменение свойства "ARTICLE" - новый запрос! Если элементов много и сервер обрывает, то либо пилить пошаговую загрузку, либо напрямую к базе запросы пилить.
    Ответ написан
    1 комментарий
  • Как подключается ядро в модуль?

    @alexprowars
    \CModule::includeModule("sale"); или \Bitrix\Main\Loader::includeModule('sale');
    Ответ написан
    6 комментариев
  • Почему такая ошибка "Class not found (0)"?

    AlexeyCaTHaR
    @AlexeyCaTHaR
    Проверьте:
    1) Подключился ли модуль
    2) Правильно ли у вас назван файл для Autoload. Вполне может быть, что модуль подключается, а класс не подгружается
    Ответ написан
    Комментировать
  • API Bitrix: расширенное управление правами на элементы и разделы инфоблоков через API существует?

    nilsrus
    @nilsrus Автор вопроса
    Кодер-самоучка
    Нашел решение. Спасибо, vtyrtov.
    Накидал функцию изменяющую права пользователя на раздел:
    function chmodSectionAccess($bid, $sid, $uid, $tid, $mod){
    	$bid = intval($bid); // идентификатор инфоблока
    	$sid = intval($sid);  // идентификатор раздела
    	$uid = intval($uid); // идентификатор пользователя
    	$tid = intval($tid); // идентификатор уровня доступа
    	$mod = ($mod === "Y"); // дать/убрать (Y|N) права на раздел 
    	
    	if ($bid > 0 && $sid > 0 && $uid > 0 && $tid > 0) {
    		
    // получаем текущий массив прав
    		$ob = new CIBlockSectionRights($bid, $sid);
    		$ar = $ob->GetRights(); 
    		
    		if ($mod) { 
    // дополняем в массив новый элемент
    			$ar["n0"] = array(
    				"GROUP_CODE" =>"U" . $uid,
    				"TASK_ID" => $tid,
    				"XML_ID" => "API"
    			);
    		} else {
    			// находим совпадающее со входными данными и исключаем из массива
    			foreach($ar as $i => $r) {
    				if ($r["GROUP_CODE"] === "U" . $uid && 
    					$r["TASK_ID"] === $tid) unset($ar[$i]);
    			}
    		}
    // записываем новые права из массива (другие не наследуемые будут удалены)
    		$ob->SetRights($ar); 
    		
    		return true;
    	} else {
    		return false;
    	}
    }


    Надеюсь кому-то поможет данное решение.
    Буду рад, если подскажете способ еще проще.
    Ответ написан
    Комментировать
  • Не цветной PhpStorm?

    humiliation
    @humiliation
    Чем больше знаю - тем больше дурак
    все руками подсвечивается в любых цветах, я просто один раз настроил и таскаю за собой файл настроек. У меня material theme стоит с измененной подсветкой. А вообще еще в репо плагинов посмотри
    Ответ написан
  • Не цветной PhpStorm?

    @Dj_Vreditel Автор вопроса
    Всё оказалось куда проще.
    Я как новичёк по своему не знанию сам обрубил всю подсветку. На деле как писал Orbb менять можно почти всё, что вам угодно.

    Моя ошибка заключалась в следующем:
    1) Правая кнопка мыши по скролл бару
    5b79ff1a2884d128003365.png

    2) Customize Highlight Level
    5b79ff6ea6616799044491.png

    3) Перетаскиваем ползунок с "None" на "Syntax" или "Inspection"
    5b79fff3a100e707910729.png

    Теперь у вас будет полная подсветка синтаксиса!
    Ответ написан
    Комментировать
  • Объясните как работает php-fpm?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала почитайте что такое SAPI. Затем представьте что apache + mod_php разделили на web-сервер, который проксирует запросы на php-fpm и отдает статику, и собственно отдельный web-сервер который имплементит SAPI и выполняет запросы связанные только с php. То есть статику отдавать мы можем только через php. Суть примерно та же что и у apache2 + prefork + mod_php но оптимизированный только для работы с php. Так же можно поставить на фронт более быстрый и легковесный сервер который умеет проксировать запросы.

    То есть php-fpm это эдакий fast-cgi сервер который постоянно держит готовые для работы пул-процессов (сколько в пуле процессов настраивается, так же как и от какого пользователя их запускать и все такое прочее). Каждый новый запрос уходит в какой-либо процесс из пула, запрос отрабатывает, возвращаем результат тому кто попросил (web-серверу обычно). Если процесс падает (fatal допустим) - поднимаем новый.

    Принципиальной разницы между apache2+mod_php нету, просто упрощается инфраструктура. Наш web-сервер должен только уметь проксировать запросы и отдавать статику, а php-frpm вообще может быть на разных машинах (балансировщиком можно раскидывать запросы). Ну и сами понимаете, nginx + php-fpm будет быстрее обрабатывать запросы чем apache2+mod_php какой бы мы менеджер процессов не использовали в апаче. Минусов по сравнению с apache+mod_php я даже не могу предложить.

    А php-runtime не зависит от этого. Он один на всех, CLI, FPM, mod_php...
    Ответ написан
    7 комментариев
  • Как вывести количество имеющихся в конкретном складе тех или иных товаров?

    Можно использовать следующее:

    CModule::IncludeModule('catalog');
    $arFilter = Array("PRODUCT_ID"=>array(94247,162284));
    $rsStoreAmount = CCatalogStoreProduct::GetList(Array(),$arFilter,false,false,Array());
    while($arStoreAmount = $rsStoreAmount->Fetch())
    {
    	echo "<pre>";
    	print_r($arStoreAmount);
    	echo "</pre>";
    }
    Ответ написан
    6 комментариев
  • Как вставить иконку только для первого пункта меню в Wordpress?

    vladislav_boychenko
    @vladislav_boychenko
    Купаюсь в гривнах
    У вас есть примерно такая структура:
    • Первый пункт
    • Второй пункт


    В стилях и пишем:
    .nav li:first-child{background: url(.../путь к иконке) no-repeat center left; padding-left: 20px;}

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

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Либо просто с помощью CSS бекграундом или :after дописать, или же если нужно все-таки разметку вставить () - в админке для пункта меню укажите специальный css-класс, например has-icon-login, далее хукаетесь в walker_nav_menu_start_el и модифицируете разметку:
    function my_custom_markup( $item_output, $item, $depth, $args ) {
    
    	// Отлавливаем элемент меню с нашим классом
    	if ( in_array( 'has-icon-login', $item->classes ) ) {
    		// Меняем разметку
    		return str_replace(
    			'<a',
    			'<i class="icon-user"></i><a',
    			$item_output
    		);
    	}
    
    	return $item_output;
    
    }
    add_filter( 'walker_nav_menu_start_el', 'my_custom_markup', 100, 4 );
    Ответ написан
    Комментировать
  • Почему выскакивает ошибка #1064 при выполнении SQL запроса INSERT INTO?

    shaks
    @shaks
    во первых запрос должен иметь примерно такой формат:
    INSERT INTO `price` (`N`, `title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES  (1,'Poi',2,1000,1500,2000,4000)

    обрати внимание, что кол-во полей не то, кол-во данных которые вставляются не соответствует кол-ву полей
    во вторых у вас тип данных не правильный

    `localsum` char(100) not null,
    `regionsum` char(100) not null,
    `rfsum` char(100) not null,
    `intersum` char(100) not null,

    эти поля должны быть int а не char
    Если вы хотите именно строку, то цифры (при вставке) нужно оборачивать в кавычки

    в третьих, раз `N` int not null auto_increment, то значение N можно или игнорировать при вставке, или передавать NULL

    P.S. Строку вставки можно делать так:
    INSERT INTO `price` SET `field`=1, `field2`=2, `field3`=3

    так визуально понятней что куда вставляется

    ------
    UPD
    <?php
    // соединение с базой:
    chdir(dirname(__FILE__));
    $dsn = 'mysql:host=localhost'.
        ';dbname=temp_development'.
        ';port='.
        ';connect_timeout=15';
    
    $user = 'root';
    $password = '123qwe#';
    $db = new PDO($dsn, $user, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    
    
    $file = "./price.txt";# 'Poi',2,1000,1500,2000
    # в файле я убрал последнее значение, т.к. для него нет соответствующей колонки в ДБ
    if($fp = fopen($file, 'r'))
    {
        $sql = "INSERT INTO `price` (`title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES ";
        $prepare = array();
        $insert = array();
        while($line = fgets($fp))
        {
            $line = trim($line);
            if(!$line)
                continue;
            # Читаю файл построчно, чтоб память не загадилась если файл содержит оч много данных
    
            // валидацию данных я не делаю
            array_push($prepare, implode(",", array_fill(0, 5, "?")));
            $insert = array_merge($insert, explode(",", $line));
    
        }
        $pr = $db->prepare($sql."( ".implode("), (", $prepare)." )");
        $pr->execute($insert);
    }

    этот код сгенерирует такой вот запрос в бд:
    INSERT INTO `price` (`title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES ( '\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000' )
    Ответ написан
    3 комментария