Ответы пользователя по тегу Веб-разработка
  • Как отобразится 1 материал с максимальным id, а за ним 5 материалов с меньшими id в категории?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    id это не для тебя - это номер записи в системе.
    он используется для связи между двумя базами, обеспечивая уникальность записей.

    для вывода используй другие способы сортировки
    от сортировки по каким-то полям по очереди, до составления строки из чисел для сортировки по этой строке
    Ответ написан
    Комментировать
  • Как правильней будет фильтрация периода?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Я пользуюсь штукой под названием Timedoctor.
    День начинается в 00.00, заканчивается в 23.59.
    Когда я нажимаю показать неделю - считается время от понедельника 00.00 - 23.59 воскресенья. Если нет записей за период - пишется "извините, кажется вы в это время не работали".
    Ответ написан
    Комментировать
  • Как лучше реализовать многоязычность сайта, работающего без CMS, на голом HTML/CSS?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Самое сложное будет url реврайтинг - то есть автоматический выбор языка для чувака, у которого определенная страна. Сделать многоязычник без этого легко - основное выедание мозга именно в этом.
    То есть просто сделать страницы на разных языках с каноникалами не проблема.
    Проблема потом сделать умный роутер, который автоматически будет выбирать язык в зависимости от кучи условий и менять все ссылки на странице, понимая что адрес к странице по сути один, а языков много.

    Т.к. не всегда нужно копировать всю страницу чтобы отобразить ее на другом языке.
    Есть такая ерунда как отобразить страницу под определенную страну. Но многие статьи могут просто изменять один блок с контентом и все, а меню и вовсе - меняют только тексты ссылок, и зачем копировать шапку-подвал, чтобы потом не дай бог изменение - все, вешайся?
    Ответ написан
  • Angular 2 longpolling как посылать следующий запрос сразу после ответа?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    я может ошибаюсь но нода-модуль http.get() умеет делать коллбэки, если это родной модуль, в него нужно и сунуть второй запрос. в вашем случае происходит запрос, и обьект подключения... мапится?

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

    Я бы от этого плясал в попытке понять

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

    Но вполне может быть так что я со своего плинтуса пытаюсь подсказать эйлфелевой башне и заранее дико извиняюсь
    Ответ написан
    Комментировать
  • API запись в базу данных?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    На самом деле задача глубокая и очень сильно субьективная - типа как хочешь так и делай, вопрос безопасности безусловно всегда будет болеть.

    Вот мои зарисовки:
    https://vk.com/away.php?to=https%3A%2F%2Fdocs.goog...

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

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

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

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

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

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

    На деле там все просто - первый (приватный) принадлежит тебе и создается на твоем компе. С помощью него можно создать второй (т.е. публичный), который кому угодно отправить. Этот кто угодно добавляет его к себе в "белый список" и второе - добавляет его в папку к какому-то юзеру - чтобы связать логин с тобой - т.е. ты то можешь быть Гриха, а у него на компе ты gzhegow, и вот в папку gzhegow он кладет твой ключ, а потом еще в программку вносит что типа такому то ключу можно входить. После этого тот, у кого есть приватный может ходить туда, где его публичный в белом списке. В общем то все. Так делают связь например сервер-сервер - создали два приватных, на их базе два публичных, обменялись публичными - все работает - можно с одного сервера удаленно давать команду другому и им не нужна дибильная кнопка "разрешить подключение", которую должен нажать человек - серваки то небось один в Германии, другой в Камбодже.
    Ответ написан
    Комментировать
  • Авто сокращение ссылок?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Тут я бы начал с того, что разделил сущность опубликованных ссылок и страниц. Потому что если короткая ссылка будет указывать на короткую - ты прилетел (ситуация когда 1 короткая указывает на 2 короткую, а 2 короткая - назад на первую).

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

    В сущности же наиболее на мой взгляд умное решение для людей - это иметь кнопку "копировать ссылку" и рядом с ней "копировать короткую ссылку" ведь именно это цель - позволить пользователям обмениватся инфой на устройствах, где пока еще не очень удобно вводить текст.
    Ответ написан
    Комментировать
  • На каком движке лучше написать сайт "Фото-галерея"?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ну так то движок это всего лишь система управления данными.
    Кому-то удобно видеть их в виде таблицы и управлять с помощью navicat
    Кому-то удобно представлять себе цепочку инфоблоков и платить битриксу деньги
    Кто-то делает обертку под гуглдокс

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

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

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

    Система управления (движок) - кому ты собрался упрощать работу?
    Хранить данные?
    Картинки имеют месторасположение и уникальное название в пределах этого расположения, что контроллируется операционкой.

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

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

    Минусы xls - большой xls файл долго читать
    Минусы csv - его неудобно открывать в экселе, а опенофис постоянно лагает при попытке что-нибудь скопировать и вообще тупое животное
    Минусы xml - без программиста правильно не составить
    Минусы json - некоторые его боятся, потому что он настолько прост, что его способны понять только программисты
    yaml - новее json-а, но опять же без мозгов не составить
    делать админку управления картинками - дорого и нахер нужно, разве что потешить самомнение

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

    Это будет проще сделать чтобы протестировать идею, чем писать фронтенд и долбаться тем что какая-то кнопка не работает, потом подрубать ангуляры, реакты и тонуть в этом всем.
    Ответ написан
    Комментировать
  • Эффективна ли реклама Директ с одной визиткой (без сайта)?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Есть свидетель, что это работает
    Территориально - город Брест
    Он разместил свой сайт на всех досках и газетах в городе
    А потом добавил директ с визиткой в центре экрана и телефоном
    Услуги - сборка мебели
    Ответ написан
    1 комментарий
  • Как сделать сохранение значений веб-формы в EXCEL-фаил и отправить как вложение из веб-формы (Веб-формы 1С-Битрикс)?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    К Кодерисимо добавлю что файл отправить "как будто через форму" можно используя multipart/form-data, если нужно к емейлу прикрепить все совсем просто - fopen, fwrite, fclose, mail($headers = ....file);

    Если идет отправка на другой скрипт - используйте multipart/form-data или curl. У всех свои косяки - curl имеет свойство повисать, поитогу время от времени второй запрос не доходит, потому что первый все еще висит, поэтому нужно делать несколько запросов через while пока не исчерпается лимит или пока не будет получен ответ.

    multipart в свою очередь сложнее в написании - нужно определить разделитель, а потом тупо отправлять контент как строку, разделяя каждый файл разделителем, переносом строки, потом контент, потом 2 переноса, а строку - закодированную любым способом - у принимающего скрипта появится массив $_FILES.

    Стоит отметить, что действительно, как мне и пояснили на тостере - отправка данных через multipart/form-data не сделает отправку гарантированной в 100% случаев - это всего лишь позволит в случае успешного запроса автоматически закинуть файл во временную папку, так что ничто не мешает отправить данные в виде json - если это текстовый файл, а не уже закодированный бинарник.

    Другой вопрос если задачей является сохранить инфу из формы в эксель, в этом случае вам не нужно отправлять файл, вам нужно отправить данные скрипту, который из данных сделает файл.

    Но можете поизвращаться с отправкой сразу файла, еслли хочется помучаться.
    Ответ написан
    Комментировать
  • Как делать "многоуровневые" страницы, как в интернет магазинах?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Представь систему как кучу массивов с данными.
    Страница - массив с данными
    Товар - массив с данными
    Модель - массив с данными

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

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

    То есть на каждый такой массив будет несколько связей и относительно каждой связи будут собственные данные.

    При выводе страницы твоя задача собрать все что ты знаешь об этой странице - данные товара, данные модели, данные самой страницы.

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

    В конце у тебя получится массив страницы со свойствами. Его выводи на верстку.
    Ответ написан
  • Как вставить 3D модель и прикрутить к WordPress?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Попробуйте курнуть по слово WebGL, однажды мой хороший старый знакомый Сергей Кукунин написал на WebGl простенькую ходилку, и у него использовалась модель.

    Если ваша модель сделана в чем-угодно, вполне вероятно что ее можно конвертировать в формат 3ds-max, а оттуда в что-то, что понимает Web-gl. Скорость работы такого сайта не обещаю, поскольку разработка 3д окружения это очень геморная штука, начиная с "скрыть ту часть полигонов которая осталась за камерой", заканчивая "уменьшить детализацию при отдалении" и "построить карты нормалей".

    Это все достаточно тяжело, куда проще для бизнеса уровня Вордпресс отфоткать ваш товар в 12-24-36 проекциях и поставить слайдер на яваскрипте с мгновенной сменой их по мере передвижения зажатой мышки. Это работает и создает эффект 3д модели.

    То что нужно бизнесу.
    Ответ написан
    Комментировать
  • Какие хорошие книги/видео по opencart?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ты не поверишь, php.net
    И смысл даже не в том, что тебе не нужна литература по Опенкарт, а то, что понимая как работают:
    - база
    - обьекты
    - mvc
    - шаблонизатор
    Ты можешь писать на OC все что пожелаешь.
    Если ты залезешь в базу - то имена таблиц подскажут что там лежит. По каждому имени таблицы можно спрашивать у поисковой системы - не всегда, но ответ можно получить
    Объекты знать придется, это совсем не сложно.
    MVC у опенкарта неплохой, но шаблоны нарушают все возможные правила, поэтому с ним можно работать только изменяя готовый шаблон, чтобы написать свой - можно съесть себе мозги, ибо 90% всех действий в алгоритме происходят по жестко прописанному сценарию. Начнешь менять - что-то зацепишь.
    Ответ написан
    Комментировать
  • Как быстро добавить торговые предложения на bitrix?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Как написал в сегодняшней (да, смотри дату) статье на Хабре один очень здравый человек - Все программисты попадают в Тай. И потому как Битрикс это СПИД, обсуждение данной тематики было опущено.

    Поэтому... простого способа нет.
    Ты делаешь
    $id = CIBlockElement:GetList(null,['code' => to_translit($name)]);
    if ($res) CIBlockElement:Update($id, $fields);
    else CIBlockElement:Add($fields);
    
    CCatalogProduct:GetList()
    ...см выше
    
    CPrice:GetList();
    ...см выше

    И все это в foreach.

    Из важного CCatalogProduct использует в качестве ID - id элемента инфоблока. Т.е. id полученный в прошлых трех строках.

    А вот CPrice использует ID цены, и его нельзя даже обновить, не указав $fields['product_id' => $id]

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

    Потому что единственное чего боятся боссы - уязвимости по безопасности, они в этом никак. Ну то есть - на коленке написанный скрипт вида $($.ajax("/logout")), а если его додумать (что и сделал автор статьи) - то хапается пароль, который чел вводит в свое окошко и все это из скрипта, добавленного менеджером через админ-панель, если он решит стать программистом.

    Ну то есть слова они не услышат, совсем.
    Ответ написан
  • Как вынести расчёт из JavaScript?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Да, у тебя расчет выполняет модель в PHP, а из яваскрипта ты делаешь запрос к этому расчету аяксом.

    Главное чтобы твой аякс не вызывал загрузку всего сайта, а просто делал расчет, тогда все будет ну оччень быстро. Как можно это понять - сделай запрос на несуществующий URL - если сайт не подрубается - ты получишь ответ "сервер не отвечает" или стандартный .htaccess-ный Forbidden, а если подрубается - то это будет генерация страницы типа "такой страницы нету".

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

    Если не подгружать весь фреймворк, чтобы вызвать действие "рассчитать", а работать с существующей базой из кеша товаров по ценам - расчет будет мгновенно делаться и не будет так набившего оскомину "лоадера" на 10 секунд расчета трех товаров из корзины. Впрочем точный запрос по id товаров в базу отработает так же быстро, если его написать с нужными join-ами, а не "запрос-запрос-запрос-объединить на PHP-рассчитать-объединить-запрос-проверить".

    Впрочем, можно и действительно на ноде какой-нибудь. Главное помнить, что когда расчет делает сервер - он в работе, то есть нагрузка, когда расчет делает клиент - он может прислать тебе хрень разную (хакеры, да да), которую ты никак не проверишь, не произведя расчет на сервере.
    Ответ написан
    Комментировать
  • Создание элемента - какая схема лучше?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Попробуй немного изменить представление о программировании. Воспринимай все как "источники данных".

    Есть у тебя база - это источник.
    Есть у тебя пользователь - это тоже источник, НО временный (!).

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

    А вот базе твоей ID - нужен. Потому пользователь заполняет поля, жмет сохранить, а уже потом ты проверяешь - было ли в твоем источнике такая запись по некоторым критериям - например - по символьному коду "Гриша" - "grisha".

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

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

    Чтобы уменьшить такую вероятность, ты:
    а) в идеальном случае рассказываешь ему про ID и даешь выбрать записи из списка, а список - привязывает уже к ID
    б) приводишь введенный им текст по собственному алгоритму - вырезая лишние пробелы, и понимая что в конце получится более менее адекватная строка для сверки - символьный код. Но будь внимателен - алгоритм этот добавляет и другую проблему - введет пользователь два пробела после имени - наверное он ожидал, что это будет другое имя, раз два пробела. И когда он увидит "запись уже есть" - у него возникнет вопрос. Дизайном это нужно обыграть, запретами и тд.

    Таким образом ID - это указатель (!) - как в жизни - указывает "в-туда" - на место хранения записи в конкретной системе. Если ты сделаешь ID в пределах своей программы (пока она запущена) - то в твоей базе тебе придется делать связь "время_запуска_ID_программы_ID_базы" - а это ужас сколько проблем - работа с временными интервалами.

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

    Например при работе с Европейской системой SAP-кодов - мы имеем следующую проблему. Когда клиент покупает себе в фирму SAP (миллион Евро между прочим) - ему выдается набор доступных ID-шников под его продукцию. Но продукции бывает больше, чем ID-шников, искать впадлу, а второго миллиона нету, и продавец исключает товары из продажи, присваивая старым ID-шникам новые товары.

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

    Вот так где-то.

    ps. https://docs.google.com/spreadsheets/d/1nxHJiDv6dR...
    Ответ написан
    1 комментарий
  • Как в opencart вывести статью на главную страницу?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ну смотри, в OC - "модель" это файл с командами запросов и обработкой результата.
    Ты его "подключаешь"...
    $this->load->model('catalog/information');
    ...а потом вызываешь метод оттуда, передавая параметр в функцию
    $information_id = 4;
    $information_info = $this->model_catalog_information->getInformation($information_id);


    Теперь у тебя в $information_info лежат данные в каком-то виде (об этом в самом файле модели - там обработка и запросы).

    Эти данные тебе нужно вывести в некоем "шаблоне" - так случилось что в OC шаблоны называются так же, как и файлы действий - "контроллеры". Главную обрабатывает /controllers/common/home.php

    В этом файле в самом низу есть вызов шаблона, в который передается переменная $data. В эту $data тебе надо твои данные сохранить, и они будут доступны в файле шаблона, который там вызывается.

    В шаблоне уже выводи, хочешь циклом, хочешь другими шаблонами, способов масса.
    Ответ написан
    1 комментарий
  • Где искать грамотных российских WordPress разработчиков?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Для меня wordpress и талантливый в одном месте не уживаются как-то.
    Ответ написан
  • Как сделать preloader?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Прелоадер, это просто картинка, расположенная по центру div-а, который накладывается абсолютом сверху на блокируемую область или кнопку.

    Общий принцип:
    position: absolute; width: 100%; height: 100%; background: url(!image.gif!) center center no-repeat; z-index: 1;

    Отобразить в момент запроса. Скрыть при его завершении любым способом - ошибкой или удачно.
    Ответ написан
    Комментировать
  • Как правильно составить breadcrumbs по data-vocabulary.org?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Если ты используешь словарь data-vocabulary, то вот так:
    <ul>
      <li id="breadcrumb-0" itemref="breadcrumb-1" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
        <a href="/" itemprop="url">
          <span itemprop="title">Главная</span>
        </a>
      </li>
      <li> &gt; </li>
      <li id="breadcrumb-1" itemref="breadcrumb-2" itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
        <a href="/tires/" itemprop="url">
          <span itemprop="title">Легковые шины</span>
        </a>
      </li>
      <li> &gt; </li>
      <li id="breadcrumb-2" itemref="breadcrumb-3" itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
        <a href="/tires/kama/" itemprop="url">
          <span itemprop="title">КАМА</span>
        </a>
      </li>
      <li> &gt; </li>
      <li id="breadcrumb-3" itemref="breadcrumb-4" itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
        <a href="/tires/kama/kama_234/" itemprop="url">
          <span itemprop="title">Кама-234</span>
        </a>
      </li>
      <li> &gt; </li>
      <li id="breadcrumb-4" itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
        <span itemprop="title">195/65R15 91 H, Россия КАМА Кама-234</span>
        <link href="/tires/kama/kama_234/195_65_15_91_H_ops_9744/" itemprop="url">
      </li>
    </ul>


    Еще их можно разметить через ld+json (по schema.org), через верстку (по schema.org) и через тот же data-vocabulary, но вместо child-ов использовать вполне обыкновенную вложенность каждой следующей хлебушки в другую

    К слову говоря, здесь больше не значит лучше, то есть если разметишь сразу всеми тремя - получишь warning, и хлебные крошки пропадут совсем, сделай как удобнее.
    Ответ написан
    Комментировать
  • Какая CMS оптимальнее всех подходит для интернет-магазинов?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Нужно понимать что CMS "не подходит" для интернет-магазина, она "подходит заказчику" за счет своей удобности.
    Тебе как программисту подойдет связка navicat+sublime с крышей лет на 10.

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

    Из дизайна - подходит Битрикс. Он очень красивый внутри и авторитетный. За счет внутренней сложности (он безумно сложный на первых порах и жутко тупой) - цены на работы в битриксе достаточно высокие, но разве это не плюс? Дак более того - за это чудо еще и платить надо, и за счет своего авторитета CMS сама доказывает "очень умному" бизнес-гуру, что "это г...." крутое. Ну то есть с позиции денег, дизайна и понтов - это просто идеальное решение.

    Если тебе надо ДЛЯ СЕБЯ cms - то лучше не используй cms. Для себя - это фремворки и понимание взаимодействия клиент-сервер. Терминал линукс твой лучший друг, SQL язык - твой брат, а REST API - твои столовые приборы. (если интересно что это - напиши, я поясню)

    Если для заказчика но дешево - можешь взять opencart/ecshop/woocommerce - но все имеют свои недостатки и сьедят твой мозг при изучении. Ты по сути берешь на себя его головняк, глупо, но как хочешь. Современный бизнес делает очень круто - сначала заказывается дешевый кодер, который говнокодом пишет сайт, потом нанимается ДОРОГОЙ кодер почти-бесплатно (потому что без работы сидит) - который все чинит на энтузиазме и доброте, а не за деньги. Их такой расклад устраивает. Попытка обьяснить что сайт = говнокод - это некомпетентность. Ну то есть таким образом чем больше мозгов, тем сложнее заработать, т.к. сначала нанимается дешевый кодер, а потом дорогой, но тоже дешево. Как долго мы будем идиотами? Не знаю, для этого мужество надо, чтобы отказывать ВСЕМ бизнесменам из принципа.

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

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

    woocommerce требует знаний вордпресса и использует такие говно-вещи как jquery.blockui, который на время аякс запроса не просто блокирует интерфейс, а еще и не дает вешать события, в итоге стоит тебе подумать об асинхронности - съешь себе мозг.

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