• Как узнать положение курсора в div'e с contentEditable="true"?

    midnightcoder-pro
    @midnightcoder-pro
    Full stack разработчик
    Знаю, поздно
    function getCursorPosition(parent) {
    	let selection = document.getSelection()
    	let range = new Range
    	range.setStart(parent, 0)
    	range.setEnd(selection.anchorNode, selection.anchorOffset)
    	return range.toString().length
    }
    
    function setCursorPosition(parent, position) {
    	let child = parent.firstChild
    	while(position > 0) {
    		let length = child.textContent.length
    		if(position > length) {
    			position -= length
    			child = child.nextSibling
    		}
    		else {
    			if(child.nodeType == 3) return document.getSelection().collapse(child, position)
    			child = child.firstChild
    		}
    	}
    }
    Ответ написан
    2 комментария
  • Как сделать закругленные углы на css?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Например, что-то в таком духе https://jsfiddle.net/m06bkpdy/
    Или svg
    Или border-image
    Или вообще объединить с картинкой, но нужно смотреть макет.

    p.s. лучше вот так расположить градиент
    Чтобы не высчитывать размеры для средней полосы.
    Ответ написан
    2 комментария
  • Как вставить созданный элемент в строку?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Строка с HTML — это просто строка текста. Без слушателей событий и свойств DOM элементов.

    Вариант: держать в строке плейсхолдер, скажем пустой div с определённым id или классом, и после вставки HTML в документ, заменять тот пустой див на супер-пупер элемент-с-событиями:
    const datePicker = document.createElement("div");
    datePicker.className = 'datePickerInline';
    // тут накладываем на элемент всякие события
    
    const str = '<div><span>Вставляем</span><div> <div class="replace_me"></div> </div><div><p>в уже готовые html элементы в виде строки</p></div></div>';
    
    let el = document.getElementById('element');
    el.innerHTML = str;
    
    el.querySelector('div.replace_me').replaceWith(datePicker);


    План-Б: не вешать слушателей событий прямо на элементы datePicker'а, а слушать его события выше, на общем родителе: скажем, на том el, в который всё это вставляется.
    Ответ написан
    Комментировать
  • Зачем нужен composer PHP?

    @mikhail-e
    Вопрос старый, но многие будут в поиске и найдут его актуальным.
    Composer, как и другие пакетные менеджеры, есть не более чем навязанная хайпом, и желанием ее мейнтейнеров взять всё под свой контроль, утилита, к которой вы намертво привязаны. Лишняя зависимость как от самой утилиты, так и от навязываемого ей "главного" репозитория (онлайн сервиса) packagist, который на секундочку, всего лишь бизнес.
    Почти все проект уже поддались на это безумие, купились на удобство одной командой делать магию установки.
    Есть и более веские причины не пользоваться композером, но это требует глубокого понимания принципов обратной совместимости, сопровождения, и т.д.
    Ответ написан
    2 комментария
  • Как заставить элементы не выходить за пределы flex контейнера?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Так задайте отступ на размер тени.
    Ответ написан
    1 комментарий
  • Как правильно распарсить такую строку?

    Wendor
    @Wendor
    nodejs developer / *nix admin
    У вас в ответе присутствуют заголовки. Поправьте запрос. Скорее всего вы установили флаг CURLOPT_HEADER.
    Ответ написан
    Комментировать
  • $(...).attr('checked', 'checked') не работает?

    Mithgol
    @Mithgol
    Используйте $(…).prop("checked", true) и тем невозбранно достигнете желаемого.
    Ответ написан
    4 комментария
  • Как правильно получить составные данные из базы и сложить их в одну сущность?

    @EvgeniiR
    https://github.com/EvgeniiR
    Немножко не ответ
    Для класса PostsModel:
    Автор Поста является потомком Поста.
    Пост для автора - Родитель.
    Пост для даты поста - Родитель.

    *Тут была реплика про уровень комьюнити тостера, и даже "Кураторов Тега", которые позволяют себе нести вышепроцитированную чушь, но я решил её опустить, т.к. разумный человек и так поймёт со временем*

    Совет - развивайте критическое мышление и фильтруйте информацию, не верьте всему в интернете, даже если у этого 100500 плюсов на каком-нибудь ресурсе типа Хабра/SO/Medium/Тостер и т.п.


    Алексей Коновалов,
    нам нужна одна точка получения данных.

    Нам не нужна "единая точка получения данных". У вас есть ваши модели(сущности, доменные модели) - это компонент вашей системы отвечающий за часть бизнес-логики.
    Так же у вас есть представления данных. Представлений данных может быть множество. Не нужно реиспользовать одну и ту же модельку для логики/записи и для чтения(представления, UI).
    Выбрали данные из БД(raw SQL/Eloquent/DQL смапленный на DTO, что угодно)
    ->заполнили ими структуру которая сформирована исходя из нужд клиентского модуля(Frontend`а вашего),
    -> привели к нужному формату(json etc.) и отдали на фронтенд

    Он работает с базой данных и делает все, что связано с постами. И тут как раз проблема.

    Очень хорошо что вы подметили что это проблема, серьёзно. Именно по этому "Active Record" - антипаттерн.
    Некоторые, к большому сожалению, годами к этому не могут придти, того больше - отстаивают каждое архитектурное решение какого-нибудь Laravel не с позиции инженера, а с позиции религиозного фанатика.

    Модели для записи ничего про HTTP, Request и представления знать не должны. Модели на чтение по сути просто структуры данных.
    Ответ написан
    Комментировать
  • Что это за символ?

    @svetlov97
    это символ горизонтальной табуляции. Можете посмотреть тут
    Ответ написан
    4 комментария
  • Как контролировать изображения добавленные через wysiwyg редакторы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Например, при добавлении картинки ставите ей атрибут "без новости", при записи самой новости всем картинкам, на которые она ссылается снимаете этот атрибут. Периодически удаляете все картинки с атрибутом "без новости", старше, например, суток.
    Ответ написан
    4 комментария
  • Как перевернуть фото при загрузке с iphone?

    @MrTimon
    На сервере считываете имидж, проверяете его ориентацию, оборачиваете в ту которую нужно и сохраняете уже в правильном положении.
    $image = imagecreatefromstring(file_get_contents($_FILES['user_image']['tmp_name']));
            $exif = exif_read_data($_FILES['user_image']['tmp_name']);
            if(!empty($exif['Orientation'])) {
                switch($exif['Orientation']) {
                    case 8:
                        $image = imagerotate($image,90,0);
                        break;
                    case 3:
                        $image = imagerotate($image,180,0);
                        break;
                    case 6:
                        $image = imagerotate($image,-90,0);
                        break;
                }
            }
    
            $file = 'filename.jpeg';
            $uploadfile = $uploaddir . $file;
    
            imagejpeg($image,$uploadfile,90);
    //
            imagedestroy($image);


    Этот код перевернет имидж в верной ориентации. Только для роботы кода должно быть установлено exif расширение для пхп (в php.ini нужно раскоментовать строку extension=php_exif.dll, ну и нужно, конечно же, иметь этот самый php_exif.dll в папке с расширениями )
    Ответ написан
    Комментировать
  • Как определить выходит ли текст за пределы блока?

    Stalker_RED
    @Stalker_RED
    function isOverflowed(el) {
      return el.scrollWidth > el.offsetWidth || el.scrollHeight > el.offsetHeight;
    }
    https://jsfiddle.net/y6w7vg0w/
    Ответ написан
    3 комментария
  • Как словить событие для якоря?

    $(window).bind('hashchange', function() {
           alert(location.hash)
     });


    Ну или просто событие onhashchange ловишь.

    Прокрутку можешь сделать с помощью

    $('html, body').animate({ scrollTop: "100"})
    Ответ написан
    1 комментарий
  • Как сделать ссылки на изображения как вконтакте?

    Stalker_RED
    @Stalker_RED
    Да, примерно так оно и работает, только эти переменные не обязаны быть глобальными.

    ;(function(){
      var photoId = <?=$photoId?>; // это не глобальная переменная
      if (photoId) showPopup(photoId)
    })()


    На сервере тоже переменная может передаваться в соответствующий action и не быть глобальной.
    Ответ написан
    2 комментария
  • Вопрос про ООП, как использовать?

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

    Тем не менее я и сам пилил свои говноCMSки и даже конструктор сайтов без ООП. Код получался лаконичнее, быстрее и проще.

    Тут каждому своё - если что-то простое писать то ООП в PHP вовсе не нужен, на мой взгляд.

    Интересно будет послушать мнения
    Ответ написан
    Комментировать
  • Нужны ли знания серверов?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    "Это" не простое, и если у Вас действительно серьёзный проект, "играть в настройщика" не стоит, слишком много разных "но"... У большинства хостеров, которые предоставляют услуги VPS - есть штатные админы, которые так или иначе будут иметь потенциальный доступ к Вашим данным или БД, можете доверить настройку сервера им. Стоимость таких услуг, особенно если это "перенос сайта" - стоят либо недорого, либо бесплатно (разовая услуга).

    Так же есть серверы с готовыми панелями управления, наличие такое панели, позволяет Вам пользоваться сервером почти так же просто, как привычным виртуальным хостингом.

    Неужели все эти вебмастера умеют работать с серверами?

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

    DieZz
    @DieZz
    class News
    {
        private $posts = [];
        private $db;
    
        /**
         * news constructor.
         *
         * @param $db
         */
        public function __construct($db)
        {
            $this->db = $db;
        }
        
       public function getPosts()
        {
            $res = $this->db->query("SELECT `id`, `name` FROM `posts`");
            while ($row = $res->fetch_assoc()) {
                $this->posts[$row['id']] = $row['name'];
            }
    
            return $this->posts;
        }
    }

    Функция db_Iconnect:
    function db_Iconnect() 
    {
        $db = new mysqli(HOST_NAME, USER_NAME, MYSQL_PASS, DATABASE_NAME);
    
        return $db;
    }

    но лучше использовать класс для подключения к ДБ.

    В месте где планируете использовать класс news:
    $db = db_Iconnect();
    $news = new News($db);
    $posts = $news->getPosts();
    Ответ написан
    1 комментарий
  • Объясните человеческим языком, что такое веб-фреймворк на языке php?

    wielski
    @wielski
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Смогу ли я на фреймворке писать свои модули (любые и любой сложности) для моей CMS. Наверняка не в одном фреймворке нет функции анализа собственного контента (для последующего продвижения) по принципу поисковых роботов. Не помешает ли мне фреймворк создавать такие модули из-за своего ограниченного функционала.

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

    Смогу ли я совершенствовать любой модуль фреймворка (например добавление комментариев) под свои нужны не мешая его обновлению (если выйдет новая версия). Или придется ли мне все переписывать с выходом новой версии, как это приходится делать на CMS типа DLE.

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

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

    Уязвимость не найдут. К примеру, тот же Laravel пережил уже несколько крупных релизов, и разрабатывается пятый год. Защита у него на максимальном уровне, и крупных багов секьюрити с релиза пятой версии не обнаружено. И поверьте мне - не один человек бьются в попытках найти баг в ларавеле, ибо он используется не на одном десятке сайтов. Сайты на нем исчисляются тысячами.

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

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

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

    Если вы выберите крупного игрока (советую Laravel, опять же) - вам не придется задумываться о его поддержке. Это как минимум open source проект, сотни веб-девелоперов независимо работают над его усовершенствованием, и поддержкой.
    И в случае чего вы так же сможете внести вклад, форкнув проект, внеся свои изменения.

    Удачи вам.
    Ответ написан
    Комментировать
  • Как правильно выдавать 404?

    Раз уж вы сделали какую-никакую cms, то все-таки советую улучшить ее и
    отойти от формирования ссылок в htaccess. Сделайте ЧПУ на чистом PHP и
    ваша мобильность не будет иметь границ, а управление ошибками будет
    куда примитивней и сведется к обычным логическим конструкциям if else.

    Немного погуглил, вот отличная статья о том, как создавать ЧПУ при помощи
    PHP. Сначала рассказывается о том, как сделать посредством htaccess, а после
    идет как раз то, что вам нужно, начиная с заголовка ЧПУ на PHP и два примера
    с разной реализацией.

    Не поленитесь и разберитесь с этим :).

    А ответ сервера - 404 Not Found, на PHP будет выглядеть вот так:

    header("HTTP/1.0 404 Not Found");

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

    Winsik
    @Winsik
    сис.админ, недопрограммист :)
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*[^/])$ $1/ [L,R=301]

    ну а дальше ваши реврайты:
    RewriteRule news/$ /tmp/
    RewriteRule forum/$ /tmp/
    Ответ написан
    4 комментария