Ответы пользователя по тегу Веб-разработка
  • Как организовать перевод гайдов Material Design? Существует ли программа для заметок "на полях" сайта?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Как "организовать"? То есть вы спрашиваете, кому отдать команду, чтобы за вас это сделал? И это проблема?

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

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

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

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Тебе нужны логи почтового сервера, их как правило у техподдержки запрашивают индивидуально.
    Плюс тебе помогут логи доступа к файлам, чтобы посмотреть, на какой файл идет отсылка сразу после твоей команды отсылки писем (возможно либо какой-то модуль на ЦМС-ке работает как вирус (ну то есть на какое-то действие висит второе действией - запросить список адресов откуда-то там и отправить туда почту, ну то есть твой сервак используют для рассылки другие люди, которые создали какой-то свой мега-модуль для сайта), либо хлопнули хакеры и добавили спам рассыльщик).
    Ответ написан
    2 комментария
  • Табульные вкладки с выводом соответствующих новостей для каждой вкладки?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    1. Сделайте запрос в базу данных, получите данные
    2. Сделайте верстку табов, есть решение с ява-скриптом и без. Если без - то перед вкладкой ставится невидимый input[type="radio"] а стили пишутся вида input ~ .tab {display: block};
    3. Разбейте данные запроса по вкладкам

    Проще сделать чем обьяснить.

    пс. Люблю ЦМС-ки за то, что вам нужно искать специалиста в этой ЦМС-ке. Они нормально так создают рабочие места))
    Ответ написан
    Комментировать
  • Как выделить и скопировать только левую часть текста с сайта не захватив правую?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Я на работе пишу отчеты когда из браузера копирую именно с той же проблемой столкнулся.

    Копируете все полностью в Sublime Text, потом зажимаете SHIFT и правой клавишей мышки выделяете левый столбик - выделение станет умное и будет выделять по "столбцам" - столбцом будет каждая буква, удобно короче.

    Есть и более изощренные способы - написать регулярку вида "от начала строки одного слово" и нажать "выделить все", но тут уже надо немного соображать.
    Ответ написан
    Комментировать
  • Веб-сервис Менеджер задач. Какие выбрать технологии?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    php будет дорабатывать дешевле, но это же будет и его минусом - на языке где разработка дешевая, профессионалы не задерживаются, а значит чем дольше времени проект будет на плаву тем дороже он будет становится в обслуживании

    взять js + node - там профессионалы дорогие, зато код будет качественный - одного спеца можно в случае проблем на другого поменять легко

    взять python - и у вас профессионалов 1 на 100 километров, зато он один сядет все сделает

    ==

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

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

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

    Кратко еще раз - на пхп разработка дешевле, но постоянно придется менять специалиста, потому что там мало профессионалов - один того не знает, другой этого, третий наговнокодил и тд. На яваскрипте разработка дороже, зато больше уверенности что все будет гладко. Что до Питона или там всяких АСП.нет - то найти разраба будет сущим адом, и придется терпеть все его прихоти, зато сделано будет как с конвеера, там обычно узкоспециализированные профи с очень умной головой.
    Ответ написан
    Комментировать
  • Битрикс. Как загружать разные инфоблоки в зависимости от URL?

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

    Если у вас в пределах одной папки может быть куча адресов с параметрами, таких как
    /catalog/
    /catalog/category-name/category-name/product-name
    то либо вы используете стандартный написанный компонент каталога
    либо пишете свой компонент. Он работать будет в двух словах так:
    1) получить адрес
    2) отрезать папку в которой мы сейчас
    3) остальное разбить по заранее известным правилам (если хотите можно почитать про .urlrewrite.php - он как раз про эти правила)
    4) параметры запихнуть в запрос, чтобы выдрать информацию
    5) информацию вывести в соответствии с шаблоном

    Битрикс не первой удобности система, часто приходится бегать из одного места в другое. Гораздо удобнее, когда модули сайта лежат в папке modules/ например, а внутри каждого есть папки model + view + controller - тогда вы сразу видите, где лежит верстка, где запросы к базе, а где скрипт который соединяет одно и другое в нужном порядке.

    К сожалению ВСЕ современные ЦМС предпочитают сделать наоборот - сначала разбить на model/view/controller, а потом долбаться с одинаковыми именами круглые сутки, постоянно прыгая из папки в папку, как кенгуру
    Ответ написан
    Комментировать
  • Почему при редактировании шаблона html слетают теги?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    У битрикса стоит защита, там есть модуль родной заводской кажется "сканер безопасности".
    Проще говоря на вашего пользователя нет прав размещать теги <script> в коде.
    Нужно попросить админа изменить права для вашего юзера.
    Ответ написан
    Комментировать
  • Почему слетает верстка в Битриксе?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Чаще всего проблемы верстки связаны с подключением всяких глобальных стилей. Бутстрапы, библиотеки от новичков - все это объявляет классы и особо не думает о будущем - а бы заработало, а дальше как хотите. Нанимайте на работу людей знакомых например с БЭМ или чем-то таким.
    Они конечно люди особые, любят поумничать и покидать умных фраз. Но пообщавшись с ним 15 минут вы можете понять - легко ли это для него самого, или он просто только что статью прочел, как верстать на бэм
    Ответ написан
    Комментировать
  • Как удалить ссылку?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Третий вариант - залогиниться под админом и справа сверху будет переключатель "режим редактирования". Штука не очень быстрая и удобная, зато позволяет точно определить где лежит искомый файл и сразу вызвать панельку для его изменения.
    Ответ написан
    Комментировать
  • Как сделать сайт для небольшой производственной компании?

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

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

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

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    1) Первое что нужно сделать -- CTRL+F5

    2) Несколько раз нажать CTRL+F5 - вы не поверите, браузеры это единственное место, в которых две перезагрузки это лучше чем одна.

    2б) Поставить расширение Clearcache в браузер и нажать кнопку "Очистить".

    3) Проставить к ссылке параметр с "img.jpg?" . filemtime($filename); если вы пишете на серверном языке (PHP например).

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

    5) И на крайняк - открыть вашу картинку по прямой ссылке и там нажать CTRL+F5 и убедится что она изменилась.

    6) Если она изменилась, а при возврате на страницу все еще старая, проверьте URL - если он совпадает с пунктом 5, вы не поверите - ЗАКРОЙТЕ БРАУЗЕР и откройте его снова. Современные требования быстродействия заставляют браузеры почерному кешировать некоторые иконки и favicon, что вроде бы поменялось, а на деле все равно из локального хранилища картинки берутся.

    7) Попробовать в режиме инкогнито CTRL+SHIFT+N в большинстве браузеров.
    Ответ написан
    Комментировать
  • Возможно ли привязать одно свойство к другому (Битрикс)?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Средствами админки это точно не сделать. Вообще битрикс только выглядит хорошо, он весьма топорный и неумелый внутри. В нем удобно искать данные вашим заказчикам (любящим красивые админки). Привыкайте закачивать данные через CSV файлы, а работу в админке оставьте продавцам и прочим лентяям.

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

    ===

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

    А потом в вашем инфоблоке элементу проставлять свойство через привязку к только что созданному инфоблоку - "красные яблоки".

    Только на самом деле мне непонятно зачем, ведь можно сделать одно свойство "цвет", а второе "фрукт". Опишите подробнее задачу.
    Ответ написан
  • Как заставить tooltip не убираться при наведении на него?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Все проще.
    .b-bullet {
      /* стили кружочка со знаком вопроса */
    }
    .b-bullet:hover .b-bullet__pad,
    .b-bullet:focus .b-bullet__pad {
      visibility: visible;
    }
    .b-bullet__pad {
      visibility: hidden;
      position: absolute;
      top: 100%
      left: 50%;
      margin-left: -100px;
      width 200px;
      height: 0;
    }
    .b-bullet__tooltip {
      /* стили подсказки */
    }


    В HTML (EMMET code):
    .b-bullet>.b-bullet__pad>.b-bullet__tooltip

    Если хотите, чтобы между иконкой и подсказкой было место например для треугольничка - просто добавьте padding-top в элемент b-bullet__pad, таким образом вы создадите невидимое пространство, двигаясь по которому, система будет считать, что вы все еще в :hover, и не будет закрывать подсказку.
    Ответ написан
    Комментировать
  • Как создать адаптивный дизайн?

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

    Это работает либо инлайн-блоками, либо флоатами.
    Если инлайн-блоки - нужно родительскому элементу постоянно занулять размер шрифта. А в колонке возвращать его обратно. Плюсы - можно выровнять колонки по центру если нужно (редко нужно на самом деле, чаще создают второй контейнер с отступами).
    Если флоатами - вешать на родительский элемент clearfix. Ну и разумеется выравнивание по центру САМИХ КОЛОНОК будет недоступно. Кроме того - работа с float: left; весьма специфична по наследованию максимальной высоты, например, когда вы хотите сделать форму для ввода в которой в одной колонке находится лейбл, а в другой поле, при этом форма должна выглядеть ровно - вы задаете строке min-height: 30px например, а потом попытка сеткой унаследовать этот min-height: сломает вашу сетку к чертям.

    Короче, используйте inline-block;

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

    >> БЭМ
    .grid.grid_size_12
      .grid_col.grid__col_size_2.grid__col_size_4mobile


    Вышеуказанный код работает примерно так - по-умолчанию в строке помещается 12х, внутри находится колонка которая по умолчанию занимает 2/12 = 1/6 экрана, на мобильном 4/12 - 1/3 экрана по ширине.

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

    Напишите свою сетку, это не так сложно, а потом вы сможете задавать отступы колонкам примерно в таком виде
    .grid {
      display: block;
      font-size: 0;
      box-sizing: border-box;
      min-height: inherit;
      max-height: inherit;
      height: 100%;
    }
    
    /* здесь не нужна вложенность, на класс будут навешиваться другие классы */
    /* мы указываем "начинается с класса", чтобы каждый раз не писать .grid__col.grid__col_size_2 а просто писать grid__col2 например */
    [class^="grid__col"] {
      display: inline-block;
      vertical-align: top;
      font-size: 1rem; /* постоянно следите за этим размером шрифта, он еще не один раз напомнит о себе */
      box-sizing: inherit;
      height: 100%;
      min-height: inherit;
      max-height: inherit;
    }
    
    /* циклы */
    .grid_col_size_12 .grid__col_size_12 {
      width: 100%;
    }
    .grid_col_size_12 .grid__col_size_6 {
      width: 50%;
    }
    /* и т.д. */
    
    .grid_project_foo {
      margin: 0 -8px -16px;
    }
    
    .grid_project_foo .grid__col {
      padding: 0 8px;
      margin-bottom: 16px;
    }


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

    P.S.
    Только что проверил колонки с float: left. Их ломает min-height - они перестают влазить по ширине, а если убрать min-height: - не будет работать выравнивание по высоте. А причина в том, что отрицательный маргин ломает все флоаты к чертям. Так что да, единственный нормальный вариант это inline-block.

    Если вам нужно раскрасить колонки - используйте table, table-cell, которое на мобильных устройствах (после перестраивания в столбик) превратится в block, inline-block.
    Ответ написан
    1 комментарий
  • По какому принципу написать bootstrap структуру?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    На бутстрапе 12 колоночная сетка, которая подходит не всегда.
    Я написал для себя свои сетки на 2 3 4 6 8 10 12 16 колонок и под каждое разрешение
    После этого в конкретном проекте (или модуле) задаю класс b-grid_padding_8 b-grid_margin_bottom_16, а по умолчанию сетка без отступов вообще.

    Таким образом если мне нужны нестандартные (неодинаковые колонки) - я либо подбираю нужное соотношение в сетках, а если его невозможно подобрать в процентах - задаю g-grid__col без цифры, а потом добавляю второй класс .b-project__colleft/right и указываю размеры ячеек для левой колонки например width: 200px, для правой width: calc(100% - 200px).

    Конкретно по вашему примеру: у вас сетка начинается не отступом, а колонкой (отступа то ли нет вообще, то ли он уже использован для того, чтобы сместить всю верстаемую страницу) - а внутри отступ есть - то есть по любому у вас будет "сетка-в-сетке" или "сетка-в-контейнере".
    Ответ написан
    1 комментарий
  • Как правильно передать ID поста в модальное окно?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Выводить контент с помощью fancybox - туда шаблон
    Или сразу вывести все модальные окна и поскрывать их, а потом в div.modal иметь параметр data-modalname="" и скрипт который открывая новое окно, закрывает старое.

    Не стоит забывать про мобильные устройства с маленьким экраном, это означает, что при создании модалок с нуля не стоит использовать position: absolute, left: 50%, top: 50%, поскольку размеры окна придется вручную высчитывать под размер экрана. Универсальное решение - темная подложка под модальным окном делается как и всегда position: fixed; width: 100%; height: 100%; но добавляем overflow-y: auto;
    Потом идет div.modals__table (display: table), div.modals__cell (display: table__cell; vertical-align: middle); сами модалки - inline-block и они будут равняться по центру для любого экрана.

    Модалкам после этого можно указать width: calc(100% - _двойной_отступ_) и потом каждой конкретной модалке задавать max-width.
    Ответ написан
  • Как дебажить страницы Wordpress?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    Ответ был в том, что некоторые функции Wordpress выводят в поток - например get_header(). По привычке подумал что они возвращают данные, а не выводят
    Ответ написан
    Комментировать
  • Как масштабировать рекламные баннеры при адаптивной верстке?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ай есть десктопная версия, есть мобильная.
    На десктопной картинка побольше, на мобильной - поменьше.
    Да здравствует классика!
    Ответ написан
    Комментировать
  • WEB front-end editor?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    В вордпрессе я повстречал некоторые темы сделанные под Divi.
    Он очень легко поясняет общую суть верстки.
    Другой вопрос - что никто так и не сообразил сделать его отдельным модулем под любую CMS или сайт
    Ответ написан
    Комментировать
  • Где бы почитать про такую "архитектуру"?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Эм насколько я понял этих любителей придумать новые слова restful, куемпампул и прочих друзей:

    Там как идет - через запрос AJAX отсылается в заголовках (headers) тип запроса - их там аж несколько штук - всякие GET POST PUT DELETE и тд - вишь ли пацанам было лень отправить одну переменную type - и они такие придумали RESTful сервисы - совершили переворот в науке.

    А вместе с ними такими запросами научились кидаться мобильные телефоны, приложения разные и вообще как они тостеры не научили кидаться ими. А твое апи дескать такое все из себя апи, что ему плевать - кто спросил - мобилка, чайник или ноутбук - он всегда что-то сделает. Но они ясен болт спросили, передав обычный массив - JSON данные, и поэтому для чего было создавать новые типы запросов кроме GET и POST - опять же тайна.

    По факту - обычный например если с PHP-бекендом - контроллер, или даже просто файл ajax_user_add.php, который обрабатывает входящий массив и тип запроса и что-то делает - назад выдает сообщение, данные и статус ошибки. Они поспешили назвать это API и теперь это знаешь как на собеседовании звучит! Без этого на работу не берут, вотЪ.

    Это твой яваскрипт назад подхватывает и с ним что-то уже делает.

    Что в этом всем RESTful-ьного - ну имена запросов, название еще, а что еще надо, чтобы технологию придумать?

    Наверное я дилетант просто, поэтому не понимаю всей гениальной концепции этой идеи.

    file.php
    empty($_REQUEST['foo']) && ajax_abort('Foo not defined');
    // do something
    ajax_complete();
    function ajax_complete($msg = null, $data = null) {
      $response['status'] = 1;
      !empty($msg) && $response['msg'] = $msg;
      !empty($data) && $response['data'] = $data;
      exit(json_encode($response));
    }
    function ajax_abort($msg = null, $data = null) {
      $response['status'] = 0;
      !empty($msg) && $response['msg'] = $msg;
      !empty($data) && $response['data'] = $data;
      exit(json_encode($response));
    }


    file.js
    (function ($, App) {
        // do something
        var data = {
          "foo" : "bar"
        };
        $.ajax(
          'file.php',
          {
            "data" : data,
            "type" : "POST",
            "dataType" : "json"
          }
        ).done(function (response) {
          // do something
        });
      })(jQuery, App = window.App || {});


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

    и получается Ангуляр.
    Ответ написан
    Комментировать