Начинаю переходить на создание магазинов и в душе возникает смятение, как все же правильно делать каталог и корзину в магазине.
До этого я кастомизировал компоненты не для магазинов в основном, магазины только в части техподдержки. И когда я кастомизировал, например news.list, то я обычно удалял шаблон по умолчанию и делал все с нуля, под уникальную верстку, скопировав со стандартных шаблонов в основном вывод тех или иных полей, чтобы ускорить процесс. Но с кастомизацией компонентов каталога история получается иная. Тут намешано php с javascript прилично и проверенным способом сделать корректно не получилось. Пришлось оставить стандартный код и ухищряться, чтобы впихнуть нужную верстку, промеж стандартной битриксовой, некоторые блоки нельзя было удалить, т.к. стандартный функционал переставал работать, пришлось что-то оставить, что-то скрыть для работоспособности функционала из коробки (например чтобы работало увеличение, уменьшение, пришлось оставить
хотя мне это в моей верстке сто лет в обед нужно. Я даже сделал минимальный шаблон путем удалил, посмотрел работает или уже нет)), чтобы выводилась цена, кнопка и увеличение, уменьшение количества товара, чтоб легче было кастомизировать, но и тут бывает сюрпризы вылазят при интеграции верстки. Попробывал с ходу проследить цепочку, например, работы кнопок увеличения и уменьшения и тут приятный сюрприз)) одна функция javascripta вызывает другую, та еще одну и еще и еще, зачем такие сложности, видимо в силу своей малой компитентности, не совсем понимаю, но погуглив нашел старые шаблоны каталога и оказалось, что всего-то нужно отправить запрос с параметрами к этому же компоненту, но сейчас в 15 версии это реализовано через 100500 шагов.
Извиняюсь за многобукавок), но хочется максимально понятно сформулировать вопрос, как правильно делать кастомизацию стандартного шаблона каталога битрикса при создании магазина? Либо с нуля делать свой шаблон и в будущем им пользоваться, а дефолтный использовать только как пример, либо нужно и дальше детально и досконально все же докапываться до всех тонкостей текущего шаблона .default, хитросплетений php and javascript, и научиться промеж них вставлять нужный мне функционал и верстку. Спасибо, что дочитали до конца, буду рад любому экспертному мнению в данном вопросе.
зы Книжку чтоль кто-нибудь написал бы по кастомизации каталога и корзины, без размазывания и прилюдий, я б купил за тысячу другую такой труд. зызы Мож самому разобраться да и написать... шутка:D
Спасибо за ответ. Я так понимаю, все же придется разобрать стандартный компонент досконально, чтоб свой сделать, оптимальный под свои цели из без лишнего кода.
Интересный вопрос на самом деле. Мне так же часто приходится делать интернет-магазины, и кастомизация шаблонов каталога, корзины и оформления заказов это просто жуть. А если клиент захотел ещё какой-нибудь "нюансик", то переделывание стандартных шаблонов перерастает в такую Ж, что проклянёшь всё. По этому я использую следующую схему. Компонент стандартный, шаблон копирую, стираю всё его содержимое, оставляю только пустой template.php. Далее и спользую самописную фукнцию: function pr($var, $type = false) { echo '<pre style="font-size:10px; border:1px solid #000; background:#FFF; text-align:left; line-height: 10px;">'; if ($type) var_dump($var); else print_r($var); echo '</pre>'; } Эта функция у меня прописана в init.php, и показывает она что находится в переменной. Так вот первой строкой я смотрю что пришло в arResult. Практически всегда там всё понятно, не смотря на то, что данных иной раз столько, что чёрт голову сломит. Затем проставляю нужные данный в нужные блоки вёрстки. Если требуется ajax перезагрузка, я использую топорный метод. Вызов компонента я делаю в отдельном файле (например block1.php). А в месте, где требуется вызов компонента, я подрубаю этот файл через include. Подключение файла я прячу в div с id="BLOCK_CONTAINER" (id естественно может быть другим). Аjax запрос я делаю некоторому файлу ajaxBlock1.php, в котором я сначала выполняю требуемые операции, а затем так же подключаю тот самый block1.php. Результат закидываю в div с id="BLOCK_CONTAINER". Можно возвращать json, если требуется обновлять несколько блоков (например содержимое корзины в рабочей области страницы и в шапке). Метод конечно топорный, но работает и не занимает много времени на реализацию.
Тем не менее каждый раз делаю так, задаю себе вопрос: может стоит всё-таки разобраться, как делать правильно? ...т.к. чую одним местом, что такой колхоз рано или поздно мне аукнется.
На мой взгляд в случае кастомизации компонента каталог и в принципе других тоже, лучше оставлять стандартную логику и внутри логики править куски html кода. Такая интеграция верстки займет больше времени, но большая часть настроек компонента будет работать.
Также надо учитывать, что каждый компонент каталога (catalog.element, catalog.section) имеет логику для инфоблока с торговыми предложениями (в массиве ключ OFFERS) и без торговых предложений. Соответственно если на сайте ску не используются, то достаточно править только ту часть кода которая идет после той где используется СКУ. Примерно так.
Сам задавался вопросом как лучше делать, когда начинал. Но было у кого спросить (Привет Витька)), подсказали, что лучше логику шаблона не трогать, а встраиваться в неё.
Другое дело на мой взгляд с BX, если логика обычная, то можно его скрипты не трогать. Но если какая-то кастомизация на уровне js, то проще сразу от него отказаться и написать свои скрипты на jQuery. В скриптах BX тоже логика для товаров с СКУ (Offers) и без них. Но библиотека топорная и кастомизация её себе дороже. ИМХО))
Успехов в кастомизации стандартных шаблонов. )
Разработка интернет магазина под ключ на 1С-Битрикс www.electroid.org, интеграция битрикс и 1С.