Ответы пользователя по тегу JavaScript
  • Безопасно и правильно ли хранить какую-либо информацию в data-id атрибуте элемента?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Простой пример из жизни, прям вот вчера код дописан. Есть сайт, у юзеров авторизованных есть фронтенд и возможность заливать картинки, музыку и видео. Также, этот контент юзер может в любой момент удалить. На каждом объекте при наведении появляется иконка для удаления, по нажатию на нее на сервер аяксом уходит запрос и удаляет файл. Айдишка файла хранится как раз в data- артибуте. Если так топорно и оставить, это означает, что авторизованный пользователь может подменить ID на любую другую и удалить чужой файл, а это нехорошо. Посему на сервере мы не просто бездумно удаляем файлы, а еще делаем несколько проверок. Проверяем пользователя и его права на удаление данного типа контента, проверяем является ли он владельцем этого файла. Если все ок - удаляем. То есть, теоретически, он может удалять свои файлы путем подставления айдишек, ну и пусть забавляется. Но навредить другим он уже не сможет.
    Ответ написан
    6 комментариев
  • Как добавить свои кнопки соц сетей addthis в тему wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У AddThis есть родной плагин для WP, который все делает как надо. Установите и не страдайте.
    Ответ написан
  • Почему Wordpress после Ajax запроса возвращает 0?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У вас проверка nonce не проходит, потому что путаница с названиями переменных - и my_ajax, и php_array и тд. Почитайте документацию или вот тут.
    Ответ написан
    Комментировать
  • Как правильно подключать javascript и дополнительные стили к wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Запомните несколько простых правил.

    1. Никогда не используйте jQuery из стороннего источника (например, Google CDN). НИКОГДА. И другие библиотеки тоже. Кроме того, чаще всего не нужно jQuery грузить принудительно, достаточно для своего кастомного скрипта указать аргументом dependency значение array( 'jquery' ).
    2. Скрипты и стили подключаются ТОЛЬКО через функции wp_register_style() / wp_register_script() и wp_enqueue_style() / wp_enqueue_script(), вызов функций группируется в одну функцию, которая вешается на соответствующие хуки. Как правильно делать - написано в документации.
    3. Не обязательно подключать все вручную. Если вы правильно зарегистрировали ваши скрипты и стили (функциями wp_register_*), то можете просто подгрузить только один свой кастомный срипт (main.js например), а к нему все остальные указать в виде зависимостей (как и jQuery в п.1). Кроме того, можно (и нужно) подключать скрипты и стили только там, где они нужны. Например, если слайдер у вас только на главной, оберните его подгрузку в if( is_home() ).
    4. На продакшне убирайте ?xxx (версии скриптов и стилей), используйте плагин типа WP Better Minify для минификации и конкатенации скриптов и стилей.

    Кажется все.
    Ответ написан
    4 комментария
  • Как вставить в wordpress калькулятор, на определенную страницу?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Есть несколько вариантов:

    1. В шаблоне page.php (single.php если нету первого) ставим проверку is_page(id) и в ней соответствующий код
    2. В functions.php оборачиваем весь код в виде функции, функцию вешаем на шорткод, шорткод вставляем в визуальном редакторе на нужных страницах
    3. Пишем простенький плагин (или в functions.php) - перехватываем ID нужных страниц на уровне запроса и вставляем нужный код на лету - после the_content() или в подвале, в общем, где он должен быть
    UPDATE:
    4. В принципе, можно весь этот скрипт убрать из тегов script во внешний js-файл и добавить его в wp_enqueue_script() с соответствующей проверкой is_page(X)
    Ответ написан
    2 комментария
  • Как подключить функию load() на странице wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    В файле functions.php:
    function my_scripts() {
        // если нужно подключать скрипт только на одной конкретной странице, а в остальных местах 
        // ни кастомный скрипт, ни jQuery не нужны, оборачиваем в проверку is_page( X )
       // где Х - ID страницы, ее slug или название (Title)
        if( is_page('2') ) {
            // кастомные скрипты следует выносить в отдельный js-файл, а не в шаблоны тулить, поэтому
            // создаем такой файл - main.js в папке js и подключаем именно его, а в 3м аргументе добавляем
            // jQuery в качестве зависимости
            wp_enqueue_script( 'my-script', get_template_directory_uri() . '/js/main.js', array( 'jquery' ), NULL, true );
        }
    }
    add_action( 'wp_enqueue_scripts', 'my_scripts' );
    Ответ написан
    Комментировать
  • Как сделать такой слайдер?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Комментировать
  • Под какие браузеры верстать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    IE10+ (который очень даже адекватен) и graceful degradation, для IE7 и ниже сообщение "чувак, не гони, обнови браузер". Я уже давно не заморачиваюсь IE, по статистике в моих нишах в среднем это 4-12% посетителей, из них менее 2% - 8я версия и ниже. А версии 9+ вполне адекватны, только у 9й есть несколько особенностей, решаемых Normalize.css и одним-двумя полифилами (зависит от задач) или же тем же graceful degradation, который при подходе mobile first как бы по умолчанию идет.

    Вот вам 2 главных инструмента в помощь:
    gs.statcounter.com - статистика, можно фильтровать по странам и т.д.
    caniuse.com - что для какой версии
    Ответ написан
  • Как изменить код кнопок "Вверх", "Вниз", чтобы регулировать скорость прокрутки?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    А при чем здесь тег WordPress?
    Ответ написан
    Комментировать
  • Как сделать помощь при заполнении полей?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Плагинов для этого - тьма. Ключевое слово для поиска - autocomplete. Наверное, самый мощный и гибкий - Select2, но он и самый тяжелый и сложный в освоении. Есть родной jQueryUI Autocomplete. Есть простые и легкие - все зависит от конкретных требований. Нужен ли ajax, нужно ли произвольное оформление подсказок, локализация на разные языки, мультивыбор и так далее.

    Начать поиск можно отсюда.
    Ответ написан
    Комментировать
  • Как подключить JQuery к Wordpress, или проблема все-таки не в нем?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Никогда не включайте jQuery со сторонних сервисов (хоть jQuery.com, хоть Google CDN), потому что:

    1. В комплекте с WordPress уже идет jQuery, подключается стандартными средствами (wp_enqueue_scripts)
    2. Многие плагины рассчитывают на этот встроенный jQuery, если скрипт плагина требует наличия jQuery, при подключении скрипта всего лишь указывается аргумента dependency - 'jquery'.
    3. Вместе со штатным jQuery подключается jQuery Migrate, который может быть необходим для некоторых плагинов, использующих старые библиотеки скриптов
    4. Зачем ради одного файла добавлять на страницу сторонний запрос, который добавляет 1 лишний DNS Resolving + полный цикл RTT, а это виновники самых больших задержек по времени при загрузке страницы, а учитывая, что CDN Google будет отдавать файл скорее всего из Ирландии, а CDN jQuery - из США, резолвинг DNS будет порядка 100-300мс, RTT - еще столько же, плюс время на получение файла. Итого, железно получаем 200-600мс задержки только из-за одного jQuery, который, к тому же, еще и блокирует рендеринг страницы. Тоесть Time to First Byte будет задержан дополнительно на этот период времени. Если же подключить штатный jQuery, DNS Resolving не делается вообще (уже сделан при запросе страницы), RTT короткий, а если на сервере правильно настроен keep_alive_timeout, то RTT вообще мизерный и файл прилетает значительно быстрее.
    Ответ написан
    1 комментарий
  • JQuery: Как выполнить скрипт в загруженной странице с помощью .load()?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Цитирую John Resig(lead jquery developer):

    We have to strip the scripts out otherwise they may be executed many times. The case where a user inserts a list item (for example) with a script inside of it that pertains to that particular item. The user then, later, clones that list item (or moves the list item to a different part of the tree) results in the scirpt being re-executed if we haven't removed it ahead of time.

    In short: No browser does "run scripts on injection" so we're kind of defining our own semantics here - one aspect of that being that in order to avoid having scripts run way too many times we strip them out of the source.


    В общем, load() не будет выполнять код из загруженного файла. И не должен - неправильно это и небезопасно - иньекция в чистом виде. По логике, вам надо либо весь код в родителе держать, либо после успешной загрузки явно "пепрезапускать" загруженный скрипт. Посмотрите решение здесь:
    stackoverflow.com/questions/9794762/jquery-load-is...

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

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Делал когда-то вот тут. Там вообще к скроллу привязано куча анимаций. Исходник js открыт, можно смотреть.
    Ответ написан
    Комментировать
  • Как побороть тормоза JS в Opera 12.16?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У 12й оперы движок дохловатый, это факт. Версия далеко не свежая, никто ее не собирается поддерживать, никому это не нужно. В поддержке ВК дали весьма четкий и правильный ответ. @Fesor раскрыл его дополнительно, а @Nc_Soft дал реально дельный совет. Обновите браузер и не морочьте голову ни себе, ни людям.

    Подробнее о производительности Оперы:
    www.tomshardware.com/reviews/chrome-27-firefox-21-...
    Ответ написан