Pull to refresh
5
0
Ланец Николай @Fi1osof

JS fullstack developer

Send message

Почему функционал telderi.ru способствует мошенничеству

Reading time2 min
Views4.4K

Зашел сегодня на телдери поискать какой-нибудь подходящий сайт по нужной мне тематике. По запросу совсем немного сайтов выдал, но выдал такой Старый сайт о программировании. Домен скрыт, но в описании значилось "Продам старый сайт о программировании (9 лет), много уникального контента".

Попросил прислать домен сайта. Прислали. Смотрю сайт: ну откровенная шляпа! Серьезно. Если кому интересно, напишите в личку, дам ссылку. Но главное - он совсем не по канонам 9летней давности. Смотрю whois: Домен зареган 2018.04.05! Еще и домен с дефисом. Что это такое? При этом стартовая цена указана 130 667 рэ, а блиц: 440 000.

Вернулся в лот и написал соответствующий коммент: "Извините, но вранье же наглое. Домен зареган 2018.04.05, а вы пишете сайту 9 лет. Хоть 99, если домен молодой.". Ведь это уже дело не личное, а публичное. Имеет место наглый обман пользователей, который вообще-то легко можно трактовать как "мошенничество", потому что заведомо зная, что сайту совсем не 9 лет (а сайт - это в данном случае вполне четко Код+Домен (это же не отдельная продажа кода)), заявлялось четко: сайту 9 лет. И явно это учитывалось в определении стоимости. То есть стоимость сильно завышена за счет обмана. Поэтому я и написал, чтобы другие тоже видели.

И какой результат?

Читать далее
Total votes 9: ↑0 and ↓9-9
Comments6

Мои рассуждения на тему Как учиться программировать на JavaScript

Reading time8 min
Views16K

Дисклеймер: я ни в коем случае не хочу сказать, что именно так и надо учиться. Но за плечами 13 лет опыта и не один год активности в сообществах, так что рассуждения будут не на пустом месте. Но если вы уже состоялись как программист, скорее всего вам будет не интересна данная публикация.

Если вы новичок в JS, возможно, вам сюда.
Total votes 15: ↑9 and ↓6+3
Comments20

Хабр, я не буду сообщать тебе об ошибках на твоем сайте

Reading time1 min
Views7.8K
С современным интернетом явно что-то не так. Увидел ошибку, захотел по доброте своей сообщить о ней, но что я вижу? «Согласитесь на наши условия обработки персональных данных».

Что, серьезно? Хабр все сайты, не надо так! Зачем вы ломаете канал обратной связи? Как вы будете становиться лучше, если вы ставите барьеры? В 95%+, если я вижу просьбу согласиться на обработку, я не соглашаюсь на это и просто закрываю страницу.



UPD: уточнение: я уже был авторизован.
Total votes 44: ↑27 and ↓17+10
Comments154

1С-Битрикс препятствует отписке от рассылки требованием сдать свои персональные данные

Reading time1 min
Views8.9K
Много всякого сыпется в мой ящик, в том числе и от Битрикса (справедливости ради стоит отметить, что я когда-то регистрировался на их сайте).

Но вот мне надоели эти письма и я решил отписаться. Ведь это очень просто сделать, правда же? Но как оказалось, не в случае с 1С-Битрикс. При чем такого я никак не ожидал :) А именно — обязательной галочки «Я ознакомлен и принимаю условия конфиденциальности персональной информации, в том числе в части обработки и использования моих персональных данных».

Я такой: чего? То есть я хочу, чтобы они мне больше не писали, а они хотят, чтобы я напоследок еще и душу им продал? Первый раз с такой наглостью встречаюсь.
В общем, не стал отписываться, а просто закинул их в спам и гуглу сказал, чтобы больше не надоедал с этим.

Хотелось бы услышать мнение знающих юристов, насколько вообще законна такая наглость? Вроде как по закону же не имеют права препятствовать отписке.
Читать дальше →
Total votes 43: ↑31 and ↓12+19
Comments30

IPFS без боли (но это не точно)

Reading time12 min
Views22K


Не смотря на то, что на Хабре была уже не одна статья про IPFS.

Сразу уточню, что я не являюсь экспертом в этой области, но не раз проявлял интерес к этой технологии, но попытки поиграться с ней часто вызывало некоторую боль. Сегодня я опять взялся за эксперименты и получил кое-какие результаты, которыми хотел бы поделиться. Если коротко, то будет описан процесс установки IPFS и некоторые фишки (все выполнялось на ubuntu, на других платформах не пробовал).
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments36

Идея: анонимная регистрация/авторизация с помощью сети Ethereum + Metamask, без емейлов и т.п

Reading time2 min
Views7.2K
Наверняка многие слышали про социальные сети, основанные на блокчейне. А кто-то может даже пробовал в действии. Но нередко мы слышим следующие отзывы на этот счет:

  • Это дорого. Почему я должен платить за регистрацию?
  • Это долго. Транзакция может зависнуть на сутки и ничего не сделаешь.
  • Это неудобно. Надо осваивать какие-то там криптокошельки, как-то их пополнять и т.п.

От себя еще добавлю: дико поражает то, что криптосоциальные сети, которые топят за анонимность и децентрализованность, требуют для регистрации емейлы и телефоны. Меня это вообще коребит.

А можно ли сделать регистрацию через крипту удобной и бесплатной? И чтобы ничего более не надо было (ни юзернеймы придумывать, ни почту, ни телефон и т.п.). Я для себя ответил на этот вопрос положительно. И хотя вопросы реализации регистрации без емейлов и т.п. — это уже на совести конечного разработчика и выбранной платформы, но непосредственно бесплатную регистрацию через блокчейн — ethereum обеспечивает.
Total votes 8: ↑6 and ↓2+4
Comments25

Динамические serverless сайты на Github Pages (для тех, кто не знает, serverless используют сторонние API-сервера)

Reading time2 min
Views6.9K


Наверняка многие слышали про github pages и что там можно размещать статические сайты (сгенерировал и залил туда). Но ведь хотелось бы, чтобы при этом была динамика, то есть можно было бы один раз залить код и наполнять его как на заправдашной ЦМСке, да еще и авторизация была, динамически подгружаемые данные и все такое. Верно? Вот и мне такое захотелось. Заходите под кат, покажу, что у меня получилось.
Total votes 26: ↑8 and ↓18-10
Comments39

Prisma-CMS как движок для быстрого создания MVP

Reading time6 min
Views6.2K
Наверняка многие слышали понятие MVP (Минимально жизнеспособный продукт вики). На хабре тоже много статей про MVP, но в основном это или просто описание что такое MVP и для чего оно, или различные success и не очень story. Но я не нашел ни одной статьи, где бы описывалось на чем кто свое это MVP делал. Но ведь считается, что блоги личные проще делать на одном движке, интернет-магазины на другом и т.п. (каждый подставит свое название любимого движка для этих целей). Но почему тогда не определен более удобный движок для MVP? Я не дам четкого ответа на этот вопрос, но поделюсь своими мыслями чем именно для создания MVP хороша моя Prisma CMS, о которой я писал здесь пару месяцев назад. Кому интересно, прошу под кат.
Total votes 8: ↑6 and ↓2+4
Comments2

Как я отлавливал стили :before для фокус-элемента

Reading time2 min
Views4.4K
Сегодня столкнулся с интересной задачкой, которая заставила меня узнать больше об отладке в хроме. Хочу поделиться с вами (вдруг кто не знал). Возникшая проблемка не сложная, но оказалась не особо тривиальная.

В общем, сижу натягиваю стороннюю верстку готовую на сайт (этот момент важен, так как проблема залетела оттуда и я не был к этому готов). И на странице собирался ввести текст в спан редактируемый, который с атрибутом contenteditable=true. И вот сто раз так делал и все ОК было, а тут раз, два, и ничего не получается… И визуально элемент измененный в состоянии :focus. Ну, думаю, что-то со стилями, сейчас быстро найду, dev-tools в помощь. Расчехлил dev-tools и… и ничего не нашел… Странно. Открыл в другой вкладке другой сайт с таким же функционалом, там все работает, давай вложенность и стили сравнивать. Один-в-один.

В принципе, в заголовке написано с чем я столкнулся, но если вам нужны детали и решение, прошу под кат, там не будет много буков, а в короткое видео и чуть-чуть текста.
Total votes 16: ↑12 and ↓4+8
Comments7

Headless CMS. Почему я пишу свою

Reading time11 min
Views12K
Всем привет!

Написать эту публикацию меня побудила вот эта недавняя статья (вчера увидел).

Пересказывать основные признаки Headless/content-first/api-first и т.п. CMS я не буду, материала полно и наверняка уже многие знакомы с этим трендом. А хочу я рассказать почему и как я пишу свою систему, почему не смог выбрать из имеющихся, что я думаю о других системах, с которыми сталкивался ранее и какие вообще на все это перспективы вижу. Чтиво будет объемное (ибо материал за два года), но постараюсь написать побольше интересного и полезного. Кому интересно, прошу под кат.
Total votes 22: ↑19 and ↓3+16
Comments24

Готовая сборка новостного портала NewsModxBox

Reading time8 min
Views24K


Два года назад я писал про готовую сборку интернет-магазина на MODX Revolution. За это время было сделано не мало интернет-магазинов на ShopModxBox (о бОльшая их часть силами сторонних разработчиков) и на сегодня количество установок движка составляет 200-300 штук в месяц. Проект и сегодня продолжает развиваться, получая в ядро новый полезный функционал.

Главные качества, которые мы отмечаем в ShopModxBox — это высокая производительность, гибкость и минимальный объем кода (ShopModxBox — это решение на базе фреймворка MODX Revolution, и его собственная часть кода составляет буквально 3-5 тысяч строк php-кода + Smarty-шаблоны).

И вот на днях мы выпустили новую сборку NewsModxBox. Здесь основа та же, что и в ShopModxBox, только логика заточена именно под новостные порталы и СМИ. Сборка пилилась под реальный и совсем не маленький новостной портал и во многом отвечает реалиям бизнес-логики электронных и смешанных СМИ.
Читать дальше →
Total votes 8: ↑4 and ↓40
Comments19

Особенности метода xPDOObject::save() + транзакции

Reading time6 min
Views4.1K
Совсем недавно Сергей Прохоров ака proxyfabio написал статью Валидация объектов + транзакции. Немного эта тема обсуждалась здесь. От себя хочу добавить, что эта тема крайне важная, и на сегодня это одна из самых главных проблем в разработке крупных проектов на MODX Revolution.

Здесь сразу попрошу не начинать ничего вроде «Если делаете крупные проекты, не надо их делать на MODX, возьмите бла-бла-бла». Мы делали крупные проекты, и не только на MODX. На MODX вполне можно делать крупные проекты, и на сегодня есть всего лишь пара слабых мест, которые мы правим на индивидуальных проектах, в остальном же MODX на 98% пригоден для разработки крупных проектов.
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments0

Фабрика сайтов (Ф.CMS) проиграла суд

Reading time3 min
Views74K
Наверняка многие активные MODX-разработчики слышали про «Фабрику сайтов». Это такие ребята, которые сделали копию движка MODX Revolution, назвали ее Ф.CMS и клепают на ней сайты, выдавая за собственный движок. Но помимо того, что они взяли сторонний опенсурс-движок, они еще и «позаимствовали» различные модули сторонних разработчиков, так же переименовали их и продают как свои, не указывая никакого авторства. Среди пострадавших — andchir и bezumkin. Последний писал про эту ситуацию довольно давно и подробно.

В прошлом году мне пришлось столкнуться с парой клиентов, чьи сайты долго и безнадежно разрабатывались в Фабрике. Один из сайтов был мной переделан и по результатам был написан подробный топик, где я разбирал качество выполненной работы указанной компании. И да, переданный мне сайт был разработан на Ф.CMS, действительно очень сильно напоминающую MODX Revolution, и да, в качестве модуля интернет-магазина использовался ShopKeeper by Andchir.
Читать дальше →
Total votes 126: ↑116 and ↓10+106
Comments180

Расширение системных (и не только) таблиц в MODX Revolution

Reading time10 min
Views13K
В настоящий момент занимаюсь переделкой одного новостного портала на MODX Revolution. Так как посещаемость на сайте бывает до 100 000 человек в сутки, вопрос производительности здесь один из самых важных. С учетом того, что на текущий момент в базе более 75 000 статей, при неправильном (и даже при традиционном подходе к разработке на MODX) тормоза сайта практически гарантированы, а если частота посещений превысит время выполнения запроса, то сервер вообще ляжет. Вот часть приемов задействованных здесь для решения этих проблем я и опишу в этой статье.
Читать дальше →
Total votes 14: ↑11 and ↓3+8
Comments3

Обновленная сборка интернет-магазина на MODX Revolution. Несколько валют

Reading time3 min
Views7.5K
Больше года назад я писал про нашу готовую сборку интернет-магазина на базе MODX Revolution. Учитывая текущую обстановку с курсами валют в России (при этом необходимость указывать цены именно в рублях), я решил, что наверняка будет актуальна возможность указывать различные базовые валюты для товаров, но чтобы на сайте как бы все равно все было в рублях. Главное здесь — чтобы можно было указать валюту товара (например евро или доллары), а на сайте цена выводилась бы в рублях по курсу (возможно автоматическое обновление курсов с сайта центробанка). Это далеко не полноценный мультивалютный магазин, но зато цены всегда боле менее актуальны будут с учетом текущего курса валют.
Больше информации под катом
Total votes 3: ↑2 and ↓1+1
Comments2

Компонент источник файлов Dropbox для MODX Revolution

Reading time7 min
Views5.2K
Для реализации одного проекта возникла необходимость использовать какое-либо облачное хранилище. Суть заключается в том, что есть несколько распределенных сотрудников, каждый из которых использует специальную программу, результатом деятельности которой являются обособленные XML-файлы. Данные этих файлов необходимы для того, чтобы сформировать отчетность на сайте, где пользователи могли бы скачать доступную им информацию. Проблема в том, что сотрудники работают на своих локальных машинах и как бы с интернетом не взаимодействуют (то есть не используется какой-то единый сервер или типа того). И вот я решил задействовать Dropbox, типа настрою каждому пользователю свою папочку, куда и будут синхронизироваться их файлы, а на стороне сайта по крону буду все забирать с дропбокса и использовать для формирования отчетности. Под катом расскажу, что из этого получилось.
Читать дальше →
Total votes 18: ↑12 and ↓6+6
Comments0

Готовая сборка интернет-магазина на MODX Revolution

Reading time10 min
Views108K
Часто, когда разработчик выбирает движок для очередного магазина, он обычно оценивает этот вопрос по нескольким критериям:
  • Платный/бесплатный (если платный, то сколько).
  • Какой функционал есть «из коробки».
  • Насколько легко докрутить какой-то свой функционал.
  • Как много он потянет товаров, чтобы на хостинг не разориться.
  • Насколько гибкие политики безопасности, чтобы обеспечить совместную работу различных отделов.
  • Какие платежные системы поддерживаются.

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

В конце статьи видео с кратким обзором движка и двумя способами установки

Важно!!! Забыл сказать: кто поленится посмотреть видео, но развернет у себя сборку, логин/пароль в админку по умолчанию: admin/admin.


Демо-сайт.


Прежде чем читать дальше, советую покликать демо-версию сборки.

Сразу скажу, что разворачивая данную сборку, вы сразу получаете вот такой сайт. То есть сразу есть модель каталога, регистрация/авторизация через соцсети, оплата через робокассу и т.п. (само собой на своей копии надо будет прописать в конфигах свои данные робокассы и привязать сайт к социалкам).

Основа движка (а так же довольно большая предыстория)


За основу был взят фреймворк MODX Revolution. Только не торопитесь плеваться и закрывать страницу. Это не в точности тот MODX, с которым вам возможно приходилось встречаться. Я с MODX работаю с начала 2009-го года, и знаю его вдоль и поперек. И да, я как и многие сталкивался со многими его минусами (типа шаблонов и чанков в базе данных, тормоза и т.п.). Плюс к этому до знакомства с MODX много работал с различными самописками и другими движками, и на MODX-е я остался именно за его гибкость. Да, мне не все в нем нравится, но он позволяет с легкостью многое в нем изменить, при этом не трогая самого ядра. В процессе у меня появилось несколько компонентов, которые дополняют или меняют определенный функционал MODX-а. Вот парочка наиболее важных из них:
phpTemplates — позволяет статические MODX-шаблоны вызывать как обычные php-файлы.
modxSmarty — Подключает для фронта шаблонизатор Smarty и дополняет его некоторыми плюшками, обеспечивая тесное взаимодействие с самим MODX-ом.
shopModx — модуль для разработки интернет-магазинов.

В итоге MODX обретает не только полноценную шаблонизацию, но и гораздо бОльшую производительность. Сайты с десятками тысяч документов работают с откликом 0,02 — 0,6 секунд. Плюс к этому можно практически полностью забить на синтаксис самого MODX-а, и если вы умеете программировать на php и знаете Smarty — то здесь в разработке у вас никаких проблем не возникнет.

Но одна из самых важных вещей в MODX-е, которая точно меня держит цепями — это система пакетов (модулей для MODX-а). Она реально классная. Я даже написал модуль, который позволяет создавать свои собственные репозитории пакетов. Это особенно полезно различным веб-студиям и активным разработчикам. При этом самая вкусняшка заключается в том, что упаковывать можно не только отдельные модули, но и вообще все что угодно на сайте, хоть целиком, хоть по отдельности, хоть весь сайт вообще. Так появились снапшоты MODX-сайтов. Изначально это было реализовано только на самом modxcloud.com (официальный хостинг от разработчиков MODX-а), но совершенно без документации и каких-либо релизов ими был выложен скрипт vapor, который предназначался для того, чтобы любой мог сделать снимок своего сайта и закинуть его на modxcloud.com. При этом обратная связь как бы и не подразумевалась (то есть брать снимки с modxcloud.com и разворачивать на любом своем хостинге). Не буду вдаваться в подробности, но я взял этот vapor, модифицировал его и добавил ему еще один скрипт (import.php). Теперь с помощью этого скрипта можно как делать снимки сайтов, так и разворачивать их поверх чистого сайта. Скачать мой vapor можно из официального репозитория. И вот как раз с этим вапором я взял курс не только на отдельные модули, но и на готовые сборки сайтов.

В чем смысл таких сборок?

Смысл в том, что когда на проекте используется сразу несколько каких-то отдельных компонентов, которые совместно должны дать какой-то ожидаемый результат, важно не только их наличие, но и тонкая настройка, чтобы обеспечить наилучший эффект + максимальную гибкость. И понятно, что для этого надо не только очень хорошо их знать, но и иметь опыт применения, знать как лучше сделать, какие подводные камни бывают и т.п. А вот если дать разработчику уже готовый сайт, где уже все установлено и настроено, то потолок вхождения и объем работ снижаются в разы.
Вот эта сборка как раз и есть готовый интернет-магазин на базе моих и стандартных модулей, обеспечивая наилучшую производительность, гибкость и управляемость.

Что уже есть в этой сборке?


  • Добавлен компонент Billing. На этом модуле завязано все, что связано с заказами, оплатой и т.п.
  • Корзина перестала существовать отдельно. Теперь Корзина — это еще не оформленный Заказ (Order). Теперь даже не оформленные заказы хранятся в базе данных, что как минимум позволяет видеть кого что интересует, а так же определять реальный процент конверсии и выявлять возможные ошибки.
  • Компонент Basket (Корзина) остался, но почти все, что связано с самими заказами, перенесено в Billing. Basket и дальше останется отдельным модулем, а в Billing-е будет только необходимый минимум логики. Рассчет на то, что сам механизм заказа, оплаты и т.п. можно будет реализовывать в любых сторонних модулях, которые будут взаимодействовать с биллингом.
  • Добавлен и сверстан новый шаблон по умолчанию с использованием bootstrap. Много всяких аджаксовых плюшек и полноценное JS-API.
  • Добавлен табличный редактор документов.
  • Добавлено управление заказами.
  • Добавлен личный кабинет пользователя, регистрация, смена пароля, восстановление пароля и т.п.
  • Настроена регистрация через Login, смена/восстановление пароля и т.п.
  • Добавлен модуль modHybridAuth (авторизация через социальные сети). Пока четко проверены Twitter, Facebook и Google, но должны и другие работать.
  • Подключен сервис оплаты Robokassa.
  • Настроены политики безопасности:
    • Контент-менеджер;
    • Администратор магазина;
    • Менеджер магазина;
    • Продвинутый менеджер магазина.



Что дальше делать с этим сайтом после установки?


Делаете копию шаблона и меняете в нем все, что угодно. Шаблонизация на Smarty, входные данные массивами, все процессоры на классах. То есть не трогая ядра, можно переделать сайт как угодно.

Пример, как добавлять еще платежные системы

Вот у нас есть оплата через робокассу, и стоит задача прикрутить еще какой-нибудь способ оплаты. Посмотрим, как это делается.

Это базовый процессор для любых типов оплаты.
<?php

/*
    Абстрактный класс на проведение оплаты.
    Его нельзя вызывать напрямую, чтобы исключить случаи инжекта оплаты. 
    Этот класс должен расширяться другим классом конкретной платежной системы,
    чтобы использовать методы проверки платежа самой платежной системы
*/

abstract class modWebPaymentsCreateProcessor extends modObjectCreateProcessor{
    public $classKey = 'Payment';
    
    protected $BillingProcessorsPath;
    
    public function checkPermissions() {
        
        // Проверяем подпись платежной системы
        $ok = $this->checkSignature();
        if($ok !== true){
            $this->error($ok);
            return false;
        }
        
        return parent::checkPermissions();
    }
    
    public function initialize(){
        
        $this->BillingProcessorsPath = MODX_CORE_PATH . 'components/billing/processors/';
        
        $this->setDefaultProperties(array(
            'currency_id'  => $this->modx->getOption('shopmodx.default_currency'),
        ));
        
        if(!$this->getProperty('paysystem_id')){
            return $this->error("Не был получен ID платежной системы");
        }
        
        return parent::initialize();
    }
    
    public function beforeSet(){
        
        $this->setProperties(array(
            "createdby" => $this->modx->user->id ? $this->modx->user->id : null,
            "date"      => time(),
        ));
        
        return parent::beforeSet();
    }
    
    public function beforeSave(){
        if(
            !$currency_id = (int)$this->getProperty('currency_id')
            OR !$currency = $this->modx->getObject('modResource', $currency_id)
            OR ! $currency instanceof ShopmodxResourceCurrency
        ){
            return $this->error("Не был получен объект валюты");
        }
        
        if(
            !$paysystem_id = (int)$this->getProperty('paysystem_id')
            OR !$paysystem = $this->modx->getObject('Paysystem', $paysystem_id)
            OR ! $paysystem instanceof Paysystem
        ){
            return $this->error("Не был получен объект платежной системы");
        }
        
        // Проверяем, если указан счет платежной системы, то надо убедиться, что 
        // он еще не числится в биллинге
        if($paysys_invoice_id = $this->object->get('paysys_invoice_id')){
            if($this->modx->getCount($this->classKey, array(
                'paysys_invoice_id' => $paysys_invoice_id,
                'paysystem_id'      => $paysystem_id,
            ))){
                return $this->error("Данный счет уже создан в системе.");
            }
        }
        
        $this->object->addOne($currency);
        $this->object->addOne($paysystem);
        
        return parent::beforeSave();
    }
    
    /*
        Обязательно надо прописывать метод, в котором будет выполняться проверка 
        подписи с сервера платежной системы
    */
    abstract protected function checkSignature();
    
    protected function log($msg, $level = null){
        if($level === null){
            $level = xPDO::LOG_LEVEL_INFO;
        }
        $this->modx->log($level, "[Basket - ".__CLASS__."] {$msg}");
        $this->modx->log($level, print_r($this->getProperties(), true));
        return $msg;
    }
    
    protected function error($msg){
        return $this->log($msg, xPDO::LOG_LEVEL_ERROR);
    }
    
    /*
        Логируем все ошибки процессора, на всякий случай
    */
    public function failure($msg = '',$object = null) {
        $this->error($msg);
        if(!empty($this->object) && is_object($this->object)){
            $this->error(print_r($this->object->toArray(), true));
        }
        return parent::failure($msg,$object);
    }
    
    public function cleanup() {
        /*
            // Если оплата прошла успешно, то обновляем статус заказа
        */
        if($order_id = $this->object->get('order_id')){
            $this->modx->runProcessor('mgr/orders/status/pay', array(
                'order_id'  => $order_id,
            ), array(
                'processors_path' => $this->BillingProcessorsPath,    
            ));
            // На всякий случай сбрасываем счетчик ошибок, если вдруг в вызываемом
            // процессоре были ошибки
            $this->modx->error->reset();
        }
        
        return $this->success($this->getSuccessMessage(), $this->object);
    }
    
    protected function getSuccessMessage(){
        return '';
    }
}

return 'modWebPaymentsCreateProcessor';


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

А вот расширяющий процессор конкретно для робокассы:
<?php
/*
    Проводка платежа от робокассы
*/

require_once dirname(dirname(__FILE__)). '/create.class.php';

class modWebPaymentsRobokassaCreateProcessor extends modWebPaymentsCreateProcessor{
    
    public function initialize(){
        
        $this->setProperties(array(
            "paysystem_id"  => $this->modx->getOption('robokassa.bill_serv_id'),
        ));
        
        return parent::initialize();
    }
    
    /*
        Проверяем подпись с робокассы
    */
    protected function checkSignature(){
        
        $mrh_pass2 = $this->modx->getOption('robokassa.mrh_pass2');

        // Параметры, передаваемые в запросе от робокассы
        $crc        = mb_strtoupper($this->getProperty('SignatureValue'));
        $out_sum    = $this->getProperty('OutSum');
        $inv_id     = $this->getProperty('InvId');
        $shp_aid    = $this->getProperty('shp_aid'); 
        $shp_order  = $this->getProperty('shp_order', null);
        $shp_trff   = $this->getProperty('shp_trff');
        $shp_uid    = $this->getProperty('shp_uid');
         
        $my_crc = mb_strtoupper(md5("{$out_sum}:{$inv_id}:{$mrh_pass2}:shp_aid={$shp_aid}:shp_order={$shp_order}:shp_trff={$shp_trff}:shp_uid={$shp_uid}"));
        
        $this->modx->log(xPDO::LOG_LEVEL_INFO, "[Robokassa - robokassa.payResult]", print_r($_REQUEST, true));
        
        // проверка корректности подписи
        if ($my_crc !=$crc){
            $error = "[Robokassa - robokassa.payResult] - Неверная подпись. Получена: '{$crc}'. Должна быть: '{$my_crc}'";
            $this->modx->log(xPDO::LOG_LEVEL_ERROR, $error);
            return "bad sign";
        } 
        
        // else
        $this->setProperties(array(
            "sum"               => $out_sum,  
            "order_id"          => $shp_order,  
            "owner"             => $shp_uid,
            "paysys_invoice_id" => $inv_id,
        ));
        
        return true;
    }
    
    protected function getSuccessMessage(){
        return 'OK'.$this->getProperty('InvId');
    }    
}


Как видно, это всего 60 строчек кода. Но в результате не только будет проведена оплата с учетом кто платил, через что, сколько и т.п., но и будет автоматически изменен статус заказа на Оплачен. И вот прикрутить еще какой-нибудь способ оплаты — это всего несколько десятков строк.

Итоги


В итоге, получился на самом деле очень не плохой движок. Сразу скажу, что помимо гибкости, производительность у него тоже весьма не плохая. Как раз недавно наткнулся на топик, в котором народ рассуждал, что даже 40 000 товаров уже напрягает не хило их магазины. Я делал магазины на shopModx с десятками тысяч товаров без всяких особых ухищрений, и все нормально работает. И даже если товаров будут сотни тысяч (я уже делал один на 150 000 товаров), то с небольшими доработками магазин и столько потянет.

И самое главное: эта сборка совершенно бесплатная! Конечно мы всегда открыты для приема донейтов от благодарных разработчиков, но де факто движок полностью бесплатный.

И напоследок видео с кратким обзором движка и двумя способами установки.
Читать дальше →
Total votes 29: ↑18 and ↓11+7
Comments27

Разработка интернет-магазина 13000+ товаров на MODX Revolution. Часть 1

Reading time5 min
Views21K
Я уже писал про свой компонент shopModx. И хотя мало кто его оценил, так как многие ждут именно готовых решений с одной большой кнопкой «Установить и работать», тем не менее этот компонент разрабатывается с учетом тех минусов, которые есть в MODX, и в которые часто упираются MODX-разработчики, и с учетом тех плюсов, которые в MODX есть, но о которых разработчики не знают, или просто не используют.

Так же хочу сказать, что этот модуль не просто так разрабатывается. Он разрабатывается под два не маленьких магазина (для начала), и на выходе получится обкатанная платформа для реализации крупных интернет-магазинов.

Сегодня я хотел бы начать цикл статей о разработке крупных интернет-магазинов на MODX Revolution, с рассказами о том, с какими сложностями приходится сталкиваться, и какие варианты решения этих проблем используются. А так же о том, что для решения таких проблем shopModx уже будет нести на борту, и какие приемы позволят получить 100% контроль над разработкой своего уникального магазина, не влезая в код shopModx.

Итак, немного о магазине, над которым ведется работа: это интернет-магазин мебели. Вчера импортнул базу. Получилось 13000+ документов, 43000+ ТВшек и почти 13000 записей в modx_shopmodx_products.

Сразу скажу, что я рассчитываю получать код страницы даже не из кеша и с поиском по параметрам менее чем за 1 секунду, а средняя загрузка не должна превышать 0.3-0.4 сек.
Читать дальше →
Total votes 26: ↑14 and ↓12+2
Comments35

MODX-клуб в Москве

Reading time2 min
Views4.7K
Итак, сразу о главном: объявляю об открытии MODX-клуба в Москве:-)

Базироваться будем в анти-кафе YoStudio. Заведение просто замечательное! У нас будет свой зал на 25 человек, большие столы (которые можно расставить как будет удобней), Wi-Fi. В общем все необходимое. На фотографии зал кажется голым, но это просто неудачная фотография. Там есть окна и шкаф с книгами и канцелярией, а так же стенд для презентаций.

Предполагаются мероприятия следующего формата:
  • Обучающие семинары для конечных пользователей (основы управления MODX-сайтами и т.п.)
  • Курсы повышения квалификации MODX-программистов
  • Просто приятные и полезные встречи, чтобы поболтать о любимой Системе.
Читать дальше →
Total votes 15: ↑7 and ↓8-1
Comments23
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity