четверг, марта 27, 2008

If you want something done... do it yourself.

Жан-Батист Эммануил Зорг



Фразой, вынесенной в заголовок, я обычно руководствуюсь, когда встаёт вопрос — писать что-то на PHP самому или взять готовое?

Крайний раз этот вопрос встал по поводу шоппинг-карта для сайта автосервиса «Фортуна». Отсутствие каталога запчастей и возможности делать онлайн-заказы — зияющий пробел на их сайте, который будет устранён на будущей неделе. Естественно, выбранные позиции надо складывать в корзину, т. е. шоппинг-карт, по-русски говоря.

Готовых картов — море. С ними надо разбираться, приспосабливать к своему случаю, бороться с чужими глюками и ограничениями. И в итоге, даже если всё заработает — ты остаёшься там, где был, с нулевым приростом в знании.

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

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

Получившийся шоппинг-карт выглядит так:

1) Находится в одном подключаемом файле.

2) Подробно документирован внутри: какие переменные ждёт, какие базы MySQL использует (включая SQL-директивы их создания), что устанавливает при выходе.

3) Настройки в начале, дальше черта, за которую ходить не надо.

4) Сам приспосабливается к таблицам каталога товаров. Фактически, всё, что от них действительно требуется — наличие поля price.

5) Сделан по принципу швейцарского ножа: будучи включён в веб-страницу, впрыскивает в неё стили и javascript-функции для работы карта; эти функции вызывают его самого через AJAX, в этом случае этот же файл работает как AJAX-интерфейс к базе данных; наконец, вызовом через POST его можно попросить отправить заказ по почте.

6) 286 (на момент) строк, из них 80 — комментарии.

7) Зависимости: prototype.js и моя бибилиотека wrapper'ов к PHP-функциям работы с MySQL.

3 комментария:

eGlyph комментирует...

Очень сильно дискутируемо. Отмечу вот что: надо искать не тележку, а CMS. Багов там минимум. Ага, надо знать философию использования любой CMS.

Прирост знаний в сфере написания своей тележки тоже не ахти. Кроме того, вот так, по чесноку - сколько платежных систем поддерживает твоя? :) Чтобы я от Интернета надолго не отрывался, а сразу и оплатил? А счет твоя тележка выписывает? Нет, ну я не хочу сказать, что она отстой, просто веду к тому, что это в принципе некислый кусок работы. Поэтому и коммерческих очень много.

Насчет прироста знаний. Drupal - CMS, в которой есть тележка (даже две), кроме того, это еще редкий (для РНР) фреймворк. Там есть чему поучиться.

Понимаешь, формально ты прав. Свое - оно, конечно, понятнее. И модифицируется легче. И все такое. Но на энной итерации допиливания понимаешь, что все уже написано до нас. И проще привинтить очередной модуль (который, если что, легко правится), чем доделывать свое.

К чему я все это пишу? Ну, во-первых, сам таким страдал, а во-вторых, хочу сэкономить тебе время. Чтобы ты побольше про графику писал, а не велики конструировал. :) Потому как в графике ты силен, да. :)

Сергей комментирует...

Ой, вот CMS — моё геморройное место. Я в последний раз как раз для своего офсайта пытался использовать Друпал, три дня провозился... ну всё не то и всё не так. Снёс и сделал всё на трёх PHP-файлах. Я знаю, что это не дело (наоборот, мешает делу), но — воротит вместо решения задач пытаться постигнуть представление CMS об этом решении :-) Что-то надо с этим делать — вероятно, свою CMS :-D

Платёжных систем мой карт, конечно, не поддерживает. Но и его нынешние пользователи их не поддерживают :-) Всем им карт нужен лишь для получения оформленной заявки от посетителя сайта для сделки в оффлайне.

Более того, и посетители этих систем не поддерживают :-) а до радикального апгрейда продавцов и покупателей в нашем регионе ещё есть лет... 10 :-D

eGlyph комментирует...

Если доведется столкнуться с Drupal еще раз - могу помочь с возникающими вопросами.

Поиск по этому блогу