Как выгрузить товары в наличии из Битрикса в Яндекс Маркет

По умолчанию Битрикс выгружает в YML (Яндекс Маркет) все активированные товары.

Товарам у которых указана цена и количество на складе больше нуля, в выгружаемом файле XML присваивается значение available=”true”

Товарам у которых указана цена и количество на складе меньше или равно 0, в выгружаемом файле XML присваивается значение available=”false”

Задача сделать выгрузку только тех товаров, которые есть на складе, то есть их количество больше нуля, не важно указана цена или нет.

1) Создадим свой скрипт экспорта. Для этого возьмем из /bitrix/modules/catalog/load/ два файла: yandex_run.php и yandex_setup.php
2) Скопируем их в любое место на диск и переименуем, например new, главное сохранить окончание _run.php, в нашем случае получится так: new_run.php и new_setup.php
3) Теперь копируем эти файлы в /bitrix/php_interface/include/catalog_export/
4) После этого в админке битрикса появится новый скрипт экспорта:



5) Теперь нужно добавить в наш файл скрипта условие для фильтра. Открываем файл new_run.php и находим строку 590:

$filter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");


6) Вставляем условие:

"!CATALOG_QUANTITY" => 0


Получаем строку:

$filter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "!CATALOG_QUANTITY"=>0);


Теперь будут выгружаться только те товары, которые есть в наличии.

Если у вас включены Торговые предложения (SKU), то нужно добавить такое же условие в строке 868, найдите:

$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");


и замените на:

$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "!CATALOG_QUANTITY" => 0);

Добавлено: 01 Марта 2015 09:47:59 Добавил: Андрей Ковальчук

Как реализовать «Задать вопрос о товаре» в Битриксе

Рассмотрим на примере демо магазина (Управление сайтом – версия 12), установленного на редакции «Малый бизнес». На карточке товара необходимо внедрить вкладку «Задать вопрос».



На вкладке будет форма с тремя полями: имя, email, текст. Задача формы: покупатель задаёт вопрос про интересующий его товар на странице данного товара. Форма должна отправлять на заранее заданный email: имя покупателя, email покупателя, текст с вопросом и название товара, которое автоматически подставляется с карточки товара, откуда отправляется вопрос.

1) Создадим вкладку «Задать вопрос». Для этого перейдём на страницу любого товара и в «режиме правки» скопируем шаблон комплексного компонента bitrix:catalog. В нашем случае используется шаблон сайта eshop_yellow.


2) Откроем файл \bitrix\templates\eshop_yellow\components\bitrix\catalog\myshop\bitrix\catalog.element\.default\component_epilog.php и после кода:

<?if($arParams["USE_REVIEW"]=="Y" && IsModuleInstalled("forum") && $arResult["ID"]):?>
<a href="#" id="tab3"><span><?=GetMessage("CATALOG_REVIEWS")?></span><span class="clr"></span></a>
<?endif?>


вставим:

<a href="#" id="tab4"><span>Задать вопрос</span><span class="clr"></span></a>


3) Сохраняем файл, обновляем страницу (сбросить кэш) и у нас появляется вкладка:



4) В качестве формы используем компонент bitrix:main.feedback. Чтобы его изменить, скопируем содержимое \bitrix\components\bitrix\main.feedback\ в \bitrix\components\myshop\main.feedback\

5) В файле \bitrix\templates\eshop_yellow\components\bitrix\catalog\myshop\bitrix\catalog.element\.default\component_epilog.php вставим код в строке 76 после тега <?endif?>:

<div class="cnt">
<?$APPLICATION->IncludeComponent("myshop:main.feedback", ".default", array(
"USE_CAPTCHA" => "Y",
"OK_TEXT" => "Спасибо, ваше сообщение принято.",
"EMAIL_TO" => "mymail@myshop.ru",
"REQUIRED_FIELDS" => array( ),
"PRODUCT_NAME" => $arResult["NAME"],
"EVENT_MESSAGE_ID" => array( 0 => "7",) ),
false
);?>
</div>


“EVENT_MESSAGE_ID” — указываем ID почтового шаблона, на основе которого будут отправляться письма.
“EMAIL_TO” — указываем email, куда будут приходить данные из формы.

6) Открываем файл \bitrix\components\myshop\main.feedback\templates\.default\template.php и в 14 строке после:

<form action="<?=$APPLICATION->GetCurPage()?>" method="POST">


добавим код:

<input type="hidden" name="product_name" value="<?=$arParams["PRODUCT_NAME"]?>">


7) Открываем файл \bitrix\components\myshop\main.feedback\component.php и в 55 строке после:

"TEXT" => $_POST["MESSAGE"],


добавим код:

"PRODUCT_NAME" => $_POST["product_name"],


8) В админке: Рабочий стол -> Настройки -> Настройки продукта -> Почтовые события -> Почтовые шаблоны открываем Отправка сообщения через форму обратной связи

9) Пишем строчку Товар: #PRODUCT_NAME#, в этом месте будет передаваться название товара.

10) Теперь нужно указать электронный адрес, куда должно прийти сообщение с вопросом о товаре. В «режиме правки» редактируем параметры компонента myshop:main.feedback

11) Проверяем работу формы, заполняем, отправляем:



12) Получаем вопрос с сайта на электронный адрес, который указали в параметрах компонента:

Добавлено: 01 Марта 2015 09:42:09 Добавил: Андрей Ковальчук

Битрикс — Не удалось обнаружить код вызова компонента

При попытке открыть свойства (настройки) компонента появляется ошибка «Не удалось обнаружить код вызова компонента», попробуйте добавить в файл .htaccess пару строк:

php_value mbstring.func_overload 2 
php_value mbstring.internal_encoding UTF-8


Если у вас хостинг Timeweb (Таймвеб), то нужно добавить пару других строк в файл /cgi-bin/php.ini

mbstring.internal_encoding=utf-8 
mbstring.func_overload=2

Добавлено: 01 Марта 2015 09:30:37 Добавил: Андрей Ковальчук

VMBitrix — Assign a new IP address (manual)

Ручные сетевые настройки для Виртуальной машины Битрикс или настройка своего IP адреса в VMBitrix на CentOS



Имея локальную сеть с адресом wi-fi роутера 192.168.1.1 и адрес wi-fi карты 192.168.1.2 на компьютере, где располагается виртуальная машина, я прописал следующие настройки для статического IP адреса VMBitrix:

Type IP address: 192.168.1.100
Type Broadcast: 192.168.1.255
Type default gateway IP address: 192.168.1.1
Type network mask: 255.255.255.0
Type DNS server IP address: 192.168.1.1

Настройки сетевого адаптера VMware Player:

Добавлено: 01 Марта 2015 09:29:34 Добавил: Андрей Ковальчук

Как сделать теги ссылкой в новости или в статье на Битриксе

Для детальной страницы (news.detail):

<? $tag = $arResult["FIELDS"]["TAGS"];
$arrTags = explode(',', $tag);
$count = count($arrTags);
$i = 0;
foreach($arrTags as $value):
$i++;
$value = trim($value);
echo '<a href="/search/?tags='.str_replace(' ', '+', $value).'">'.$value.'</a>';
if($i != $count) echo ', ';
endforeach;
?>


Для списка новостей или статей (news.list):

<? $tag = $arItem["FIELDS"]["TAGS"];
$arrTags = explode(',', $tag);
$count = count($arrTags);
$i = 0;
foreach($arrTags as $value):
$i++;
$value = trim($value);
echo '<a href="/search/?tags='.str_replace(' ', '+', $value).'"&gt;'.$value.'&lt;/>';
if($i != $count) echo ', ';
endforeach;
??

Добавлено: 01 Марта 2015 09:28:11 Добавил: Андрей Ковальчук

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

В 12 версии Битрикса в демо интернет-магазине существует два варианта отображения торговых предложений SKU (выбор параметров товара):

Выпадающий список:



Таблица сравнения:



Изменить вид представления SKU можно через выполнение функции COption::SETOptionString в командной php строке битрикса — Рабочий стол >> Настройки >> Инструменты >> Командная PHP-строка

Таблица сравнения:

COption::SETOptionString("eshop", "catalogDetailSku", "list",false, s1);


Выпадающий список:

COption::SETOptionString("eshop", "catalogDetailSku", "select",false, s1);

Добавлено: 01 Марта 2015 09:22:47 Добавил: Андрей Ковальчук

Настройка почтового сервера на виртуальной машине Битрикс под Gmail

По умолчанию на виртуальной машине VMBitrix 4.2 почтовый сервер не настроен. Настроим почтовый сервер на CentOS с использованием аккаунта на Gmail.

1) Выбираем первый пункт Mail sending system parameters



2) SMTP server name: smtp.gmail.com

3) SMTP port: 587

4) Default sender address: вашеимя@gmail.com

5) Is SMTP authorization required?: Y

6) Username: вашеимя@gmail.com

7) Password: ваш пароль от почты

8) Is TLS required?: Y

9) Save changes?: Y

Добавлено: 01 Марта 2015 08:59:09 Добавил: Андрей Ковальчук

Интернет-магазин Битрикс — кнопка «Быстрый заказ» или «Купить в один клик»

В стандартной конфигурации интернет-магазина на Битрикс “Малый бизнес” или “Бизнес” отсутствует возможность заказать товар в 1 клик или по другому называют такую кнопку:

купить в один клик
быстрый заказ
купить без регистрации
В маркетплейсе Битрикса есть соответствующий модуль Intaro: Купить в 1 клик.

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

1) Создадим веб-форму “Быстрый заказ”







2) Сохраним и теперь нужно включить “упрощённый режим редактирования форм”. Настройки -> Настройки продукта -> Настройки модулей -> Веб-формы



3) Вернемся в Сервисы -> Веб-формы -> Настройка форм. Нажимаем [+] в столбце “Вопросы”. Добавим по очереди три вопроса:

Имя
Телефон
Товар





4) На вкладке “Ответ” в поле [ ANSWER_TEXT ] поставьте пробел, иначе вопрос не сохранится. Для каждого вопроса выберите соответствующий тип поля:

Имя (text)
Телефон (text)
Товар (hidden)



5) Теперь нужно вставить код компонента bitrix:form на страницу товара (карточка товара), для этого на пустой странице вставим компонет bitrix:form и скопируем шаблон в папку quick_order. Затем возьмем код компонета с такими настройками:

<?$APPLICATION->IncludeComponent(
    "bitrix:form",
    "",
    Array(
        "AJAX_MODE" => "Y",
        "SEF_MODE" => "N",
        "WEB_FORM_ID" => "1",
        "RESULT_ID" => $_REQUEST[RESULT_ID],
        "START_PAGE" => "new",
        "SHOW_LIST_PAGE" => "N",
        "SHOW_EDIT_PAGE" => "N",
        "SHOW_VIEW_PAGE" => "N",
        "SUCCESS_URL" => "",
        "SHOW_ANSWER_VALUE" => "N",
        "SHOW_ADDITIONAL" => "N",
        "SHOW_STATUS" => "N",
        "EDIT_ADDITIONAL" => "N",
        "EDIT_STATUS" => "N",
        "NOT_SHOW_FILTER" => array(),
        "NOT_SHOW_TABLE" => array(),
        "CHAIN_ITEM_TEXT" => "",
        "CHAIN_ITEM_LINK" => "",
        "IGNORE_CUSTOM_TEMPLATE" => "Y",
        "USE_EXTENDED_ERRORS" => "N",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "3600",
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "AJAX_OPTION_HISTORY" => "N",
        "VARIABLE_ALIASES" => Array(
            "action" => "action"
        )
    ),
false
);?>


6) Откроем файл /bitrix/templates/eshop_green/components/catalog/.default/bitrix/catalog.element/.default/template.php

7) Найдем кусок кода (примерно 141 строка) и вставим ссылку на быстрый заказ.

<strong>&lt;a href="#"&gt;Быстрый заказ&lt;/a&gt;</strong>


<tr>
            <td style="vertical-align:bottom;padding-left:30px;padding-bottom: 38px;">
            <strong><a href="#">Быстрый заказ</a></strong>
                <br/>
                <?if(is_array($arResult["OFFERS"]) && !empty($arResult["OFFERS"])):?>
                    <br><div id="element_buy_button"></div>
                    <?if ($arParams["USE_COMPARE"] == "Y"):?>
                        <div id="element_compare_button"></div>
                    <?endif?>
                <?else:?>


8) Повесим на ссылку модальное окно и в тело окна вставим код компонента п.5

9) Откроем шаблон quick_order компонента bitrix:form. Путь к файлу – /bitrix/templates/eshop_green/components/form/quick_order/bitrix/form.result.new/.default/template.php

10) Заменим весь код на:

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
?>
<?if ($arResult["isFormErrors"] == "Y"):?><?=$arResult["FORM_ERRORS_TEXT"];?><?endif;?>
 
<?=$arResult["FORM_NOTE"]?>
 
<h2>Купить без регистрации: <?=$arParams["ITEM_NAME"]?></h2> 
 
<?if ($arResult["isFormNote"] != "Y")
{
?>
<?=$arResult["FORM_HEADER"]?>
 
<br />
<?
/***********************************************************************************
                        form questions
***********************************************************************************/
?>
<table>
    <tbody>
    <?
    foreach ($arResult["QUESTIONS"] as $FIELD_SID => $arQuestion)
    {
        if ($arQuestion['STRUCTURE'][0]['FIELD_TYPE'] == 'hidden')
        {
            echo $arQuestion["HTML_CODE"]; ?>
            <input type="hidden" name="form_hidden_10" value="<?=$arParams["ITEM_NAME"]?>">
        <?    
        }
        else
        {
    ?>
        <tr>
            <td>
                <?if (is_array($arResult["FORM_ERRORS"]) && array_key_exists($FIELD_SID, $arResult['FORM_ERRORS'])):?>
                <span class="error-fld" title="<?=$arResult["FORM_ERRORS"][$FIELD_SID]?>"></span>
                <?endif;?>
                <?=$arQuestion["CAPTION"]?><?if ($arQuestion["REQUIRED"] == "Y"):?><?=$arResult["REQUIRED_SIGN"];?><?endif;?>
                <?=$arQuestion["IS_INPUT_CAPTION_IMAGE"] == "Y" ? "<br />".$arQuestion["IMAGE"]["HTML_CODE"] : ""?>
            </td>
            <td><?=$arQuestion["HTML_CODE"]?></td>
        </tr>
    <?
        }
    } //endwhile
    ?>
<?
if($arResult["isUseCaptcha"] == "Y")
{
?>
        <tr>
            <th colspan="2"><b><?=GetMessage("FORM_CAPTCHA_TABLE_TITLE")?></b></th>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td><input type="hidden" name="captcha_sid" value="<?=htmlspecialcharsbx($arResult["CAPTCHACode"]);?>" /><img src="/bitrix/tools/captcha.php?captcha_sid=<?=htmlspecialcharsbx($arResult["CAPTCHACode"]);?>" width="180" height="40" /></td>
        </tr>
        <tr>
            <td><?=GetMessage("FORM_CAPTCHA_FIELD_TITLE")?><?=$arResult["REQUIRED_SIGN"];?></td>
            <td><input type="text" name="captcha_word" size="30" maxlength="50" value="" class="inputtext" /></td>
        </tr>
<?
} // isUseCaptcha
?>
    </tbody>
    <tfoot>
        <tr>
            <th colspan="2">
                <input <?=(intval($arResult["F_RIGHT"]) < 10 ? "disabled=\"disabled\"" : "");?> type="submit" name="web_form_submit" value="<?=htmlspecialcharsbx(strlen(trim($arResult["arForm"]["BUTTON"])) <= 0 ? GetMessage("FORM_ADD") : $arResult["arForm"]["BUTTON"]);?>" />
 
            </th>
        </tr>
    </tfoot>
</table>
<p>
<?=$arResult["REQUIRED_SIGN"];?> - <?=GetMessage("FORM_REQUIRED_FIELDS")?>
</p>
<?=$arResult["FORM_FOOTER"]?>
<?
} //endif (isFormNote)
?>


11) В этой строке нужно заменить ID вашего скрытого поля, которое передает название товара.

<input type="hidden" name="form_hidden_10" value="/?=$arParams["ITEM_NAME"]?/>;

Добавлено: 01 Марта 2015 08:57:01 Добавил: Андрей Ковальчук

Количество просмотров элемента инфоблока в Битриксе

Как вывести количество просмотров новостей или статей в Битриксе? Рассмотрим на примере новостного инфоблока.

1) В код компонента bitrix:news добавим:

"LIST_FIELD_CODE" => array(0=>"SHOW_COUNTER",1=>"",),


это для списка новостей и для детальной новости:

"DETAIL_FIELD_CODE" => array(0=>"SHOW_COUNTER",1=>"",),


получиться такой код:

<?$APPLICATION->IncludeComponent(
    "bitrix:news",
    ".default",
    Array(
        "IBLOCK_TYPE" => "content",
        "IBLOCK_ID" => "18",
        "NEWS_COUNT" => "20",
        "USE_SEARCH" => "N",
        "USE_RSS" => "Y",
        "NUM_NEWS" => "20",
        "NUM_DAYS" => "30",
        "YANDEX" => "N",
        "USE_RATING" => "N",
        "USE_CATEGORIES" => "N",
        "USE_REVIEW" => "N",
        "USE_FILTER" => "N",
        "SORT_BY1" => "ACTIVE_FROM",
        "SORT_ORDER1" => "DESC",
        "SORT_BY2" => "SORT",
        "SORT_ORDER2" => "ASC",
        "CHECK_DATES" => "Y",
        "SEF_MODE" => "Y",
        "SEF_FOLDER" => "/news/",
        "AJAX_MODE" => "N",
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "AJAX_OPTION_HISTORY" => "N",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "36000000",
        "CACHE_FILTER" => "N",
        "CACHE_GROUPS" => "Y",
        "SET_TITLE" => "Y",
        "SET_STATUS_404" => "Y",
        "INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
        "ADD_SECTIONS_CHAIN" => "Y",
        "USE_PERMISSIONS" => "N",
        "PREVIEW_TRUNCATE_LEN" => "",
        "LIST_ACTIVE_DATE_FORMAT" => "d.m.Y",
        "LIST_FIELD_CODE" => array(0=>"SHOW_COUNTER",1=>"",),
        "LIST_PROPERTY_CODE" => array(0=>"",1=>"",),
        "HIDE_LINK_WHEN_NO_DETAIL" => "Y",
        "DISPLAY_NAME" => "Y",
        "META_KEYWORDS" => "-",
        "META_DESCRIPTION" => "-",
        "BROWSER_TITLE" => "-",
        "DETAIL_ACTIVE_DATE_FORMAT" => "d.m.Y",
        "DETAIL_FIELD_CODE" => array(0=>"SHOW_COUNTER",1=>"",),
        "DETAIL_PROPERTY_CODE" => array(0=>"",1=>"",),
        "DETAIL_DISPLAY_TOP_PAGER" => "N",
        "DETAIL_DISPLAY_BOTTOM_PAGER" => "Y",
        "DETAIL_PAGER_TITLE" => "Страница",
        "DETAIL_PAGER_TEMPLATE" => "",
        "DETAIL_PAGER_SHOW_ALL" => "Y",
        "DISPLAY_TOP_PAGER" => "N",
        "DISPLAY_BOTTOM_PAGER" => "Y",
        "PAGER_TITLE" => "Обзоры",
        "PAGER_SHOW_ALWAYS" => "Y",
        "PAGER_TEMPLATE" => "",
        "PAGER_DESC_NUMBERING" => "N",
        "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
        "PAGER_SHOW_ALL" => "Y",
        "DISPLAY_DATE" => "N",
        "DISPLAY_PICTURE" => "N",
        "DISPLAY_PREVIEW_TEXT" => "Y",
        "AJAX_OPTION_ADDITIONAL" => "",
        "SEF_URL_TEMPLATES" => Array(
            "news" => "",
            "section" => "",
            "detail" => "#ELEMENT_CODE#/",
            "rss" => "rss/",
            "rss_section" => "#SECTION_ID#/rss/"
        ),
        "VARIABLE_ALIASES" => Array(
            "news" => Array(),
            "section" => Array(),
            "detail" => Array(),
            "rss" => Array(),
            "rss_section" => Array(),
        )
    )
);?>


2) Чтобы вывести количество просмотров в шаблоне списка новостей, добавим следующий код в news.list/.default/template.php

<?=$arItem['SHOW_COUNTER']?>


3) И для детальной новости в news.detail/.default/template.php

<?=$arResult['SHOW_COUNTER']?>

Добавлено: 01 Марта 2015 07:52:07 Добавил: Андрей Ковальчук

Как сделать выпадающее меню из названий элементов инфоблока в Битриксе

Для этого необходимо добавить следующий код в файл .тип_меню.menu_ext.php

Обязательно укажите ID инфоблока из которого необходимо выводить элементы в меню.

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); 
 
global $APPLICATION; 
 
if(CModule::IncludeModule("iblock")) 
{ 
 
$IBLOCK_ID = 7; // указываем из какого инфоблока берем элементы 
 
$arOrder = Array("NAME"=>"ASC"); // сортируем по свойству SORT по возрастанию 
$arSelect = Array("ID", "NAME", "IBLOCK_ID", "DETAIL_PAGE_URL"); 
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y", "PROPERTY_razdel"=> $_REQUEST["SECTION_ID"]); 
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect); 
 
while($ob = $res->GetNextElement()) 
{ 
$arFields = $ob->GetFields(); // берем поля 
// echo $arFields['NAME']." - arFields['NAME']<br>"; 
/* echo '<pre>'; 
print_r($arFields); // 
echo '</pre>'; */ 
 
// начинаем наполнять массив aMenuLinksExt нужными данными 
$aMenuLinksExt[] = Array( 
$arFields['NAME'], 
$arFields['DETAIL_PAGE_URL'], 
Array(), 
Array(), 
"" 
); 
 
} // while($ob = $res->GetNextElement()) 
 
} // if(CModule::IncludeModule("iblock")) 
 
/* echo "<br>Массив aMenuLinksExt - дополнительный"; 
echo '<pre>'; 
print_r($aMenuLinksExt); 
echo '</pre>'; */ 
 
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks); 
// $aMenuLinks = array_merge($aMenuLinks); 
 
?>

Добавлено: 01 Марта 2015 07:48:02 Добавил: Андрей Ковальчук