Перейти к публикации

fanera

местные
  • Публикации

    71
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    6

Сообщения, опубликованные пользователем fanera

  1. 17 часов назад, weddaan сказал:

    В прошлом году я перевел все фото в формат WEBP на сайте ,и сидя в вечернем английском кафе за чашечкой английского пойла, зашел на свои сайты с других смарфтонов, и как же я удивился ... По приезду все обратно в JPG перевел.

     

    Ну может тогда вместо попивания чашечек кофе купите тогда подписку на cloudflare, в котором есть автоматическая конвертация?

    И вообще webp уже умер, гугл продвигает теперь AVIF, а потом захочет и будет продвигать новый формат, а потом еще новый, но главное бежать за трендом и jpg для остальных оставить, а то англичане без картинок останутся 😂

    • Поддерживаю 1
  2. Сейчас существует такая проблема, что если открыть в два окна добавление новости, начать загружать файлы, изображения и т.п., то при добавлении все загруженное оказывается в одном посте, в другом пропадает, что очень мешает

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

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

  3. 10 минут назад, germanydletest сказал:

    А какая разница между отдельным доменом и поддоменом?

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

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

  4. https://japing.pw/modules/13-multi-language.html

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

  5. В документации указано:

    Цитата

    $dle_api->external_auth( string $login, string $password);

    Авторизация по логину и паролю. Возвращаемые значения: true - авторизация успешна, false - логин или пароль не верны.

    Но в коде эта функция проверяет правильность пароля и логина, почему бы тогда функцию не переименовать?

  6. 42 минуты назад, moote сказал:

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

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

  7. 8 часов назад, МВИА сказал:

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

     

    Замените

    $('.file-preview-card.active').each(function() {

    На:

    if( $('.file-preview-card.active').length ) {
        
    $('.file-preview-card.active').each(function() {

    И саму замену

    sortedList.each(function() {

    На:

    if( $('.file-preview-card.active').length ) {

    sortedList.each(function() {

    Странно, что оно срабатывает несколько раз, включая панель, т.к. при поиске строки находит только одну такую строку

  8. 7 минут назад, celsoft сказал:

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

    Это я понимаю, тут файлами просто нельзя загружать, а любое облако со временем в тыкву превращается, надо будет в гитхаб выгрузить 🙂

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

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

    Файл: engine/ajax/upload.php

    Найти и добавить ниже:

    Найти:

    $('.file-can-all-selected .file-preview-card').addClass("active");

    Добавить ниже:

    order_num = 0;
    
    $('.file-can-all-selected .file-preview-card').each(function(){
      $(this).attr("order-num", order_num);
      order_num = order_num + 1;
    });

    Найти и добавить ниже:

    Найти:

    ("#check_all").prop('checked', false);

    Добавить ниже:

    $('.file-can-all-selected .file-preview-card').removeAttr('order-num');

    Найти и добавить ниже:

    Найти:

    $(this).parent().toggleClass("active");

    Добавить ниже:

    if ($(this).parent().hasClass("active")) {
    
    $(this).parent().attr("order-num", order_num);
    
    order_num = order_num + 1;
    
     } else {
    
    $(this).parent().removeAttr("order-num");
    
    order_num = order_num - 1;
    }

    Найти и добавить выше:

    Найти:

    function initmediauploadpopup() {

    Добавить выше:

    var order_num = 0;

    Найти и добавить ниже:

    Найти:

    var have_images = false;

    Добавить ниже:

    var sortedList = $('.file-preview-card.active', $self).sort(function(lhs, rhs){
      return parseInt($(lhs).attr("order-num"),10) - parseInt($(rhs).attr("order-num"),10);
    });

    Найти и заменить:

    Найти:

    $('.file-preview-card.active').each(function() {

    Заменить на:

    sortedList.each(function() {

     

  10. Наверное, одно из самых недооцененных - использование jquery, ajax, api tinymce для упрощения, автоматизации и других рутинных задач. Каждый проект имеет свои особенности, но порой можно сократить одни и те же задачи.

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

    Получить значения из Заголовок, Метатег Title, ЧПУ URL статьи (аналогично делается для других полей):

    $('[name=\"title\"]').val()
    $('[name=\"meta_title\"]').val()
    $('[name=\"alt_name\"]').val()

    Чтобы установить значение, нужно просто передать в val строку. Пример:

    $('[name=\"title\"]').val("Привет, мир")

    Взаимодействие с редактором tinymce:

    const short_story = tinymce.get('short_story');
    const full_story = tinymce.get('full_story');

    Замена чего-то в tinymce, например, в полном:

    var full_story_content = full_story.getContent();
    full_story_content = content.replaceAll('<div class=\"bad-class\">', '<p>');
    full_story.setContent(full_story_content);

    tinymce имеет набор функций (событий), которые можно использовать для упрощения. Например:

    Взять пример с BeforeSetContent (размещать нужно в tinymce.init({ .....):

    setup: function(editor) {
      editor.on('BeforeSetContent', function (e) {
    	e.content = e.content.replaceAll('<strong>', '<b>');
      });

    BeforeSetContent интересен тем, что срабатывает ДО установки содержимого в редактор. Это полезно при копировании с других источников и в других различных случаях, когда стоит задача в удалении различных html тегов и стилей из редактора.

    Взаимодействие с облаком тегов (добавить, заменить и прочее):

    $('#tags').tokenfield('createToken', 'тег');
    $('#tags').tokenfield('setTokens', data); //устанавливает, заменяя теги, где data это строка через запятую или массив или объект

    Подробнее по методам tokenfield на https://sliptree.github.io/bootstrap-tokenfield/#methods, с ним очень просто работать

    Функция для установки категории с помощью JS:

    function select_category(index) {
      $('.categoryselect').val(index);
      $('.categoryselect').trigger('chosen:updated');
      $('.categoryselect').trigger('change');
    }

    Это работает с мультикатегориями и вызывается через select_category(значение категории из <option value="..."...)

    Загрузка картинки в доп.поле с типом Загружаемое изображение:

    Тут потребуется создать отдельный php файл, т.к. при обращении из браузера с xhr, fetch или ajax на сторонние сайты будем ловить cors. Например, можно создать его в папке /engine/ajax/, назвав getimagefromlink.php:

    <?php
    echo file_get_contents($_REQUEST['image_url'])
    ?>

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

    Затем JS обработчик:

        function uploadToField(url) {
            getImgURL(url, (imgBlob) => {
                const file = new File([imgBlob], "123.png", imgBlob)
                file_uploaders['ТУТ ID ПОЛЯ'].addFile(file, "123.png");
            })
        }
    
        function getImgURL(url, callback) {
    
            $.ajax({
                url: '/engine/ajax/getimagefromlink.php',
                method: 'GET',
                data: {
                    'image_url': url
                },
                xhrFields: {
                    responseType: 'blob'
                },
                dataType: 'binary',
                success: function(data) {
                    callback(data);
                }
            });
        }

    "123.png" - название, его можно как-то предварительно получить например обрезав ссылку пути картинки, генерировать и прочее. Все индивидуально.

    Вызываем uploadToField(путь до картинки) и изображение будет автоматически загружено в поле.

    Подставка URL картинки в "С сайта (URL):" и загрузка в загрузчик файлов:

    const full_story = tinymce.get('full_story');
    media_upload( full_story.options.get('dle_upload_area'), full_story.options.get('dle_upload_user'), full_story.options.get('dle_upload_news'), '2');
    $('#copyurl').val('адрес картинки');
    $('button:contains(Загрузить)')[0].click()

    Это будет работать только с абсолютными путями, т.к. DLE не поддерживает загрузку путями вроде http://site.zone/d/fgfdg/hg445

    • Поддерживаю 2
  11. Новый апдейт отличный, еще бы хотелось видеть:


    1. Учет часового пояса для неавторизованных пользователей для правильного отображения даты и времени

    2. В "Управление комментариями" чтобы при поиске учитывалось имя комментатора

    3. Запоминание имени комментатора и почты (если он неавторизован), чтобы ему не приходилось заполнять поле повторно

    4. Не хватает разметки для профиля пользователя с возможностью включения и отключения. Не так давно гугл добавил официальную документацию https://developers.google.com/search/docs/appearance/structured-data/profile-page

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

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

  13. 20.01.2024 в 14:52, МВИА сказал:

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

    С cloudflare такое постоянно, решается банальным добавлением префикса к файлу в независимости есть на диске или нет, либо после загрузки файла отдавать его в загрузчик файлов с каким-нибудь ?cc=$_TIME, в первом случае все файлы будут отличаться префиксами, во втором кэш картинки будет вычищаться

  14. 18 минут назад, celsoft сказал:

    Никто не говорит что нужно оставлять проблему. Я лишь говорю что на данный момент эта коллизия созданная искуственно, а  не существующая в реальности. Разберем данный конкретный кейс. Его можно решить например создав GUD, это не сложно для меня, это изменить несколько байт кода, и меньше минуты времени. Но это займет в 4 раза больше памяти в базе данных на запись данной информации, это займет в 10 раз больше процессорного времени. Да это миллисекунды а не часы, но это разы!!! если сравнивать два разных подхода. И все складывается именно из миллисекунд, и если бы я не придавал значения каждой из этой миллисекунды то DLE не был бы так быстр, по отношению к другим. Это я не говорю про увеличение размеров БД, размеров страниц. Да там байт, там байт а в итоге это увеличит и расход памяти и трафик в десятки и сотни мегабайт в месяц для крупного сайта.

    Пара байт кода всего, а изменения для всех!!! пользователесь весьма и весьма глобальны. Зачем создавать такие изменения для всех пользователей только на основе исскуственно созданного кейса с которым никто никогда не столкнулся в реальности за 20 лет? А процессорное время и тратить место начнут все. Зачем им всем это?

    Это не я надумываю причину не исправлять этот метод. Для меня это не сложно заменить, это одна функция менятся на другую за секунды. Это вы притягиваете искусственный кейс к тому что эта проблема. При том что за 20 лет, а это приличный срок в реальности никто с этим не столкнулся. К тому что это все сайты должны теперь тратить мегабайты трафика, сотни часов процессорного времени в год, и тратить это в реальности здесь и сейчас, только для того чтобы не произошла коллизия которая итак не происходила 20 лет. Понимаете о чем я? Если нет, то я уже не знаю как это обьяснить.

    Согласно вашей логике то что одна картинка может замениться другой это проблема в безопасности, а значит может использоваться для атаки. А если это убрать, то атакующему потребуется в пять раз меньше ресурсов для вывода сервера из строя, например для DDOS атаки это уже не угроза в безопасности? Так что ли?  В таком случае если эта угроза безопасности, то вы предлагаете одну угрозу поменять на другую угрозу. Так какая в таком случае лучше? Мне кажется что первая все таки лучше, т.к. менее опасна.

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

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

    И все это решается просто генерацией уникального префикса по uniqid, не окончательно, но уже в большинстве случаев, чем с time(). Понимаете о чем я? Если нет, то я тоже уже не знаю как вам объяснить, что безопасность и продуманная логика превыше вашей макросекунды.

  15. 44 минуты назад, celsoft сказал:

    Я основываюсь как на логику, так и на реальный опыт и на реальную работу тысяч сайтов, а не только как вы искусственные создания лабораторный условий. Так вот согласно этому,  такая конфигурация работает в DLE уже 20!!! лет, и ни разу!!!!

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

    То, что никто не написал за 20 лет это не говорит о том, что проблемы нет, она есть и вы подтверждаете, но не желаете по какой-то надуманной причине просто взять и исправить. Я уже описал два различных случая, которые способы привести к такой проблеме, хоть и с минимальным случаем, но все же реальным. Извините, но я думаю, что подобные вопросы безопасности лежат исключительно только на разработчике, т.к. пользователи платят деньги за лицензию, а не используют open source, чтобы пушить и фиксить баги. И ответы вроде "за 20 лет ничего не получали, фиксить не будем" являются издевкой для клиента. И неважно сколько лет никто не сообщал, если оно имеет место быть, это должно быть устранено.

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

  16. 44 минуты назад, celsoft сказал:

    Зачем одновременно загружать три раза один и тот же файл.

    6 часов назад, fanera сказал:

    Не думаю, что такие вопросы должны быть, иначе тот же ВК дырявым как оставался так и остался бы. Если кейс имеется, то должна быть продумана логика для этого. А если произойдет так, что два юзера будут загружать разные файлы с одинаковым именем? По вашей логике, это минимальным случай, значит можно не париться. Но такой случай все же может произойти, нет? 

    46 минут назад, celsoft сказал:

    Поняли принципы работы?

    Не имеет значения, кейс проблемный и ситуация проблемная из-за использования банальной функции time() вместо GUID или иного идентификатора.

  17. С загрузкой файлов, по крайней мере с изображениями есть проблема.

    Открываем загрузчик изображений и файлов. Несколько раз добавляем один и тот же файл с тем же именем (у меня три файла):

    vb8oXdP.png

    Загружаем и получаем:

    icn4T5y.png

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

    После сохранения новости один файл пропадает, в загрузчике остается только два файла:

    SggWrPp.png

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

  18. Мне, как и очень многим, хотелось бы видеть редактор Editor.JS, но поскольку он работает на основе JSON, то его поддержка проблематична. Тем не менее, мне было интересно попробовать хотя бы частично реализовать его. Сразу говорю, это просто для тестирования и вообще никак не подходит под прод. Я не беру ответственность, если вы по какой-то причине решите использовать его у себя в проде и увидите миллиард ошибок.

    Возможно, кому-то будет интересно и захочет взять и доработать поддержку редактора Editor.JS под DLE.

    Делал под DLE 16.1, на 17 не проверял, тестировал конвертацию с tinymce, поддержка bbкодов, вроде [b]..[/b], отсутствует

    LCAx8a4.png

    Что есть:

    • Конвертация абзацев
    • Загрузка и конвертация изображений
    • Конвертация заголовков

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

    https://dropmefiles.com/Rsdmt

  19. 34 минуты назад, fanera сказал:

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

    Я начал этим заниматься в свободное время для себя и в целом смог продвинуться:

    90b6jMF.png

    Реализовал базовую конвертацию HTML в JSON под EditorJS и наоборот, реализовал загрузку изображений и их парсинг HTML в JSON ответ, но отсюда всплывает еще много проблем, вроде:

    1. В DLE несколько вариантов редакторов и под каждый нужен написать отдельный парсинг, а еще если парсить html, то нужно учитывать будет, что в нем может быть bbcode

    2. Если человек использует визуальный редактор и статья имеет бб коды, то как это конвертировать из JSON обратно в HTML и наоборот? Нужно сохранять прежнюю исходную структуру или обрабатывать иным образом, преобразуя bb код в привычный HTML?

    И еще множество других подводных камней и вопросов, которыми заниматься целсофту нет смысла ради хотелок людей. Например, сейчас я делаю обработку JSON в HTML на стороне сервера, но думаю перенести на сторону клиента, но тут снова всплывает вопрос. Есть готовая библиотека https://github.com/pavittarx/editorjs-html, что позволит конвертировать JSON в обычный HTML на клиенте и отправлять его на сервер, а если разработчик перестанет ее поддерживать? У EditorJS не такое большое сообщество и не так много готового. 

    А еще для редактирования постов нам надо конвертировать HTML в JSON. Для конвертации из JSON в HTML есть метод renderFromHTML, но сами разработчики не задокументировали ее и вообще говорят не использовать в продакшене. И вот делать на стороне клиента, используя, что существует или писать свой костыль, или вообще обрабатывать на стороне сервера, конвертируя блоки JSON в HTML?

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

    "И вот делать на стороне клиента, используя, что существует или писать свой костыль, или вообще обрабатывать на стороне сервера, конвертируя блоки JSON в HTML?"
    HTML в JSON*

  20. 03.12.2023 в 00:44, Harrisan сказал:

    Всем привет. Я относительно недавно в принципе узнал о таком движке, решил купить и вот строим свой сайт потихоньку. В целом все нравится, лёгкий, но редактор просто отвратительный.

    На нем невозможно писать новости с телефона и это сильно отпугивает пользователей (сайт типа ugc), да и в целом редакторы такого плана устарели.

    Очень хочется увидеть в будущем красивый, функциональный, удобный и просто восхитительный блочный редактор (editorjs).

     

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

    Я начал этим заниматься в свободное время для себя и в целом смог продвинуться:

    90b6jMF.png

    Реализовал базовую конвертацию HTML в JSON под EditorJS и наоборот, реализовал загрузку изображений и их парсинг HTML в JSON ответ, но отсюда всплывает еще много проблем, вроде:

    1. В DLE несколько вариантов редакторов и под каждый нужен написать отдельный парсинг, а еще если парсить html, то нужно учитывать будет, что в нем может быть bbcode

    2. Если человек использует визуальный редактор и статья имеет бб коды, то как это конвертировать из JSON обратно в HTML и наоборот? Нужно сохранять прежнюю исходную структуру или обрабатывать иным образом, преобразуя bb код в привычный HTML?

    И еще множество других подводных камней и вопросов, которыми заниматься целсофту нет смысла ради хотелок людей. Например, сейчас я делаю обработку JSON в HTML на стороне сервера, но думаю перенести на сторону клиента, но тут снова всплывает вопрос. Есть готовая библиотека https://github.com/pavittarx/editorjs-html, что позволит конвертировать JSON в обычный HTML на клиенте и отправлять его на сервер, а если разработчик перестанет ее поддерживать? У EditorJS не такое большое сообщество и не так много готового. 

    А еще для редактирования постов нам надо конвертировать HTML в JSON. Для конвертации из JSON в HTML есть метод renderFromHTML, но сами разработчики не задокументировали ее и вообще говорят не использовать в продакшене. И вот делать на стороне клиента, используя, что существует или писать свой костыль, или вообще обрабатывать на стороне сервера, конвертируя блоки JSON в HTML?

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

    • Поддерживаю 1
×
×
  • Создать...