• Как добавить сопутствующие товары по нажатию на chekbox?

    @PetrPo
    Андрей Белый, Вообщем компоненты каталога не поддерживают удаление товара из корзины.
    Если посмотришь, что catalog.section, что catalog.element наследуются от класса \Bitix\Iblock\Component\Base, который содержит код добавления товара в корзину по get параметру ADD2BASKET и нет никаких методов связаных с удалением.

    Простыми манипуляциями не решить, могу порядок действий описать:
    1. В шаблоне компонента, который будет выводить твои товары в файле script.js надо написать свою логику удаления, там буквально несколько строк кода достаточно, но надо будет тебе разобраться в этом скрипте. Смысл в том чтобы отправлять ajax на свой файл
    2. В файле ajax пишешь логику удаления товара - погугли, там ничего сложного
    3. Сложная вещь - при загрузке надо узнать товар уже в корзине или нет, чтобы показать нужную кнопку, нужно учитывать что товар может быть с торговыми предложениями
    4. Нужно синхронизировать все это дело с малой корзиной, в том же script.js, при добавлении товара в корзину есть такая синхронизация

    Ну и самый неприятный момент - это рассмотрение неординарного поведения юзера:
    1. захожу в товар1 и кладу в корзину 5 единиц
    2. захожу в товар2, к этому товару привязан товар1 и этот товар уже в корзине, нажимаю удалить, которая удалит все 5 единиц товара, как сам считаешь это нормально давать такую возможность пользователю? Я уже не говорю о том, что он тупить начнет, когда перейдет в корзину и не увидит там товар1, а даже с точки зрения маркетинга ты даешь ему лишнюю возможность отказаться от покупки
  • Как добавить сопутствующие товары по нажатию на chekbox?

    @PetrPo
    разве компоненты можно в шаблоне выводить? Там же вроде какие-то проблемы с кешированием начинаются...

    1. Этот вариант отпадает, с кешем не работает
    2. Думаю так лучше не делать, парсит весь контент, слишком нагрузит систему для такой мелочи
    3. Вот здесь человек как раз описывает этот вариант
    4. все также самый простой и понятный вариант, если верстку можно сделать, я бы предпочел именно этот вариант

    По второму вопросу посмотрю попозже
  • Как добавить сопутствующие товары по нажатию на chekbox?

    @PetrPo
    Андрей Белый,
    Есть несколько вариантов, но их потестить надо, не помню точно как делать
    1. Через отложенную функцию showViewContent - может не подойти опять же из-за кеша, надо проверять
    2. Через событие можно что-то там про buffercontent
    3. Можно поставить какую нибудь метку, типа #COMPONENT# и в эпилоге заменить ее, тоже надо проверить, может режим правки отвалиться
    4. Самый простой, надёжный и 100% вариант по работоспособности - это перенести все что идёт после этого компонента тоже в эпилог, но может по вёрстке не прокатить.
  • Как добавить сопутствующие товары по нажатию на chekbox?

    @PetrPo
    разве компоненты можно в шаблоне выводить? Там же вроде какие-то проблемы с кешированием начинаются...

    для этого существует файл component_epilog.php - он не кешируется

    добавление/удаление

    тут подумать надо, сходу не скажу, завтра посмотрю
  • Как добавить сопутствующие товары по нажатию на chekbox?

    @PetrPo
    Андрей Белый, так в чем тогда проблема, у тебя же есть кнопка купить, стилизуй ее как checkbox (просто визуально), можешь даже верстку не трогать, а сделать на псевдоклассах :before - будет квадратик, :after - будет галка сначала в display:none;, когда добавляешь товар в корзину, делаешь display:block;

    Или ты не знаешь как вывести сопутствующие товары? - свойство "Привязка к элементам" и компонент catalog.section с фильтром по id этих товаров из свойства
  • Как добавить сопутствующие товары по нажатию на chekbox?

    @PetrPo
    так сопутствующие товары - это тоже товары?
  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Андрей Белый, давно программируешь?

    Дальше мысли вслух
    spoiler

    Если не очень много, то на мой взгляд лучше сначала насытиться кайфом от самого факта работающего кода, то что он хреново организован или с багами - так это неизбежность))
    Вот когда сложится четкое впечатление, что можешь написать рабочий код, но как-то надоело одно и тоже, можно переходить так скажем к творчеству. Но говорю эту грань ты должен сам для себя выявить. На хабре как-то наткнулся на забавную статью. Там есть такая фаза становления программистом как Пустыня отчаяния, вот для меня примерно такое состояние стало отправной точкой в мир толстых книг.
    Почему так?
    1. У меня лично после прочтения каждой книги наступает стопор - когда часами смотришь в экран, но при этом не пишешь ни строчки кода, потому что не понимаешь как применить новые знания, в книге-то оно всегда гладко
    2. Начинает казаться, что все что ты пишешь не соответстввует тому как рассказала тебе книга, а значит не правильно. Приходится самому себе доказывать, что это не так и код действительно стал лучше, конечно он не такой как в книге, нет единственно правильного кода ))


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

    1. Head First. Изучаем Java - этого хватит для всех остальных книг
    2. Мартин. Чистый код создание, анализ и рефакторинг. Книга, которую надо читать не за один раз, а постепенно, после улучшения своих навыков, я до сих пор не осилил - но она действительно крутая. Просто она прямо рассчитана на разный уровень, ну там сам поймешь когда надо будет остановиться
    3. Head First. Объектно-ориентированный анализ и проектирование - может показаться какой-то ерундой, но я лично непроизвольно стал применять рассказанные в этой книге подходы
    4. Швец А. Погружение в паттерны проектирования - у него есть сайт с примерами на разных языках. Сама книга с псевдокодом, предполагает понимание ООП. Также не надо ее проглатывать за раз - это бессмысленно, понять все паттерны сразу не возможно, их надо переваривать.
    5. Кент Бек. Экстремальное программирование. Разработка через тестирование - книга про TDD, сам еще не читал, она следующая на очереди. Очень кстати интересная методология, кажется чем-то нереальным, но когда используешь такой подход, то код сам собой как-то появляется и главное работает без запинки
    6. Применение UML 2.0 и шаблон проектирования - тоже мощная книга, также книга которую надо не за один присест изучить, а возвращаться по мере роста навыков.
    7. Адитья Бхаргава Грокаем алгоритмы - прикольная книга, без всякой нудной херни

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

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

  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Андрей Белый, поставь еще лайк на решении, чтобы мне как ответ эксперта засчитали.

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

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

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

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

    spoiler
    В остальном я сам еще учусь и не дорос до того чтобы учить других))
  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Андрей Белый, если что, про data атрбуты кнопки - это сделано для универсальности, допсутим если ты из товара хочешь форму подгрузить и чтобы у нее поля заполнены были, например подставилось название текущего товара, то
    1. в кнопке указываешь data-element_name="<?=$arResult['NAME'];?>"
    2. в ajax файлике после цикла по requestValues, заполнится массив $parameters; $parameters['ELEMENT_NAME'] => тут будет название - добавляешь в параметры вызова компонента и внутри у тебя будет доступен $arParams['ELEMENT_NAME']
    3. В data-src ты можешь указать любой путь к нужному файлу ajax
  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Андрей Белый, Да там не хватает перед вызовом компонента
    $APPLICATION->ShowAjaxHead(true, true, true, true);

    UPD
    подгружает стли и скрипты
  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Андрей Белый, как раз для поддержки ajax, можешь и свой написать, я не настаиваю. Ну так fancybox уже подключен зачем ты костыли городишь. Вот недавно человеку помогал, на основе этого кода просто постаь свой компонент корзины вместо формы и получишь готовое решение

    пример с fancybox3
    1. кнопка
    <span class="btn js-offer-request" data-fancybox_ajax_form data-src="<?=$this->getFolder().'/ajax_form.php';?>" data-on_name="<?=$arItem['NAME'];?>" data-element_id="<?=$arItem['ID'];?>">
        <span>Забронировать экскурсию</span>
    </span>

    - data-fancybox_ajax_form - атрибут, типа флага будет для js скрипта
    - data-src - путь до ajax файла с формой
    - data-on_name, data-element_id - название атрибута, после data, соответствует названию параметра передаваемого в компонент формы (можно указывать любые, все они будут доступны внутри компонента формы, через массив $arParams)

    2. внутри шаблона своего списка новостей, файл script.js в конце добавь
    var getNodeData = function(element, arrayKeysUnset) {
    	var nodeData = $(element).clone().data();
    	
    	if(arrayKeysUnset && arrayKeysUnset.length) {
    		for(var key of arrayKeysUnset) {
    			delete nodeData[key];
    		}
    	}
    	
    	for(var key in nodeData) {
    		nodeData[key] = encodeURIComponent(nodeData[key]);
    	}
    	
    	return nodeData;
    }
    
    $(document).on('click', '[data-fancybox_ajax_form]', function() {
    	$.fancybox.open(this, {
    		type: 'ajax',
    		ajax: {
    			settings: {
    				data: getNodeData(this, ['src', 'fancybox_ajax_form'])
    			}
    		}
    	});
    });


    3. в этом же шаблоне создаешь файл ajax_form.php
    <?
    require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
    
    $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
    $requestValues = $request->getValues();
    
    if(isset($requestValues['fancybox']))
    	unset($requestValues['fancybox']);
    
    // добавление параметров для компонента, из data атрибутов кнопки
    $parameters = [];
    if($requestValues) {
    	foreach($requestValues as $key => $value) {
    		$value = urldecode($value);
    		
    		if(defined('LANG_CHARSET') && LANG_CHARSET == 'windows-1251')
    			$value = \Bitrix\Main\Text\Encoding::convertEncoding($value, 'utf-8', 'windows-1251');
    		
    		$parameters[strtoupper($key)] = $value;
    	}
    }
    
    // здесь подключаешь свой компонент формы
    $APPLICATION->IncludeComponent(
    	"bitrix:main.feedback",
    	"bootstrap_v4",
    	array(
    		// у тебя нет этих параметров, указал для примера, оставь пустой массив
    		"EMAIL_TO" => "sale@nyuta.bx",
    		"EVENT_MESSAGE_ID" => array(),
    		"OK_TEXT" => "Спасибо, ваше сообщение принято.",
    		"REQUIRED_FIELDS" => array("NAME","EMAIL"),
    		"USE_CAPTCHA" => "Y",
    		'AJAX_MODE' => 'Y',
    		
    	) + $parameters
    );
  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Андрей Белый,
    1. а что других попапов на сайте нет? или они все самописные?
    2. jquery fancybox плагин случайно не подключен?
    3. скинь ссылку на сайт, гляну что там есть
  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Андрей Белый, ок. У тебя попап - это что, какой-то готовый плагин или самопис?
  • Корзина в popup окне при добавлении товара в каталоге?

    @PetrPo
    Что-то ты мне еще на прошлый вопрос не ответил, помогло или нет. Почему скидки присвоенные определенной группе пользователей не доступны пользователям которые в эту группу попали через API Bitrix? а уже снова помощи просишь, как-то не комильфо.

    Конечно такая задача додстаточно тривиальна. Самый простой способ - это вынести корзину в отдельный файл и загружать его ajax-ом при добавлении товара.
  • Почему скидки присвоенные определенной группе пользователей не доступны пользователям которые в эту группу попали через API Bitrix?

    @PetrPo
    Андрей Белый, блин, ну я думал ты поймешь намек и посмотришь этот метод, там есть ответ на твой вопрос
    \Bitrix\Main\UserAuthActionTable::addUpdateAction($userId);
  • Почему скидки присвоенные определенной группе пользователей не доступны пользователям которые в эту группу попали через API Bitrix?

    @PetrPo
    В доках к методу CUser::SetUserGroup написано
    Метод устанавливает привязку пользователя user_id к группам groups. Привязка к группам сохраняется в базе данных, но не влияет на уже авторизованного посетителя user_id.


    UPD
    И тем не менее, у меня сработала скидка
  • Как найти где переопределяется title?

    @PetrPo
    IliaMal, понятно что он везде подключается, ты покажи мне этот метод
  • На лендинге собранном на Сайты24 необходимо заменить кнопку на вызов модального окна, как это сделать?

    @PetrPo
    IliaMal, точно не подскажу, мне чтобы вспомнить, придется самому читать доки. Поэтому я предлагаю тебе самому это сделать. Знаю что можно делать свои блоки, делал когда только появился этот модуль, он был капитально дрявый и с тех пор я ему не доверяю))
  • Как найти где переопределяется title?

    @PetrPo
    Ну вот, если логически идти, recaptcha - мало вероятно, что-то там с доставкой - тоже
    Остается
    [TO_MODULE_ID] => itconstruct.uncachedarea
    [TO_NAME] => itc\CUncachedArea::processAreas
    ищи метод itc\CUncachedArea::processAreas, смотри что в нем, можешь скинуть - тоже посмотрю