Новости Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla.Это модуль-конструктор для быстрого создания набора элементов. Это могут быть ссылки на компоненты Joomla, пункт меню или пользовательская ссылка. Есть условия для исключений показа элементов списка. Вы можете создавать собственные макеты вывода модуля, создавая таким образом почти всё, что угодно: от простого списка ссылок до стены фотографий на главную страницу или ссылки-теги для перелинковки категорий интернет-магазина, список FAQ, табы или аккордеоны. Модуль позволяет выводить изображения, адаптивные изображения, видео, адаптивные видео.v.2.4.0. Что нового?Добавлена поддержка новых компонентов. Добавлены новые типы ссылок и исключений для них: - Phoca Download, - Phoca Gallery, - RadicalMart (@radicalmart).Joomla 6. Успешно протестирована работа модуля на Joomla 6-alpha2.РазработчикамПроведён большой рефакторинг кода. Для типов ссылок созданы классы-драйверы. Теперь для того, чтобы добавить новый тип ссылки в модуль достаточно скопировать класс-образец из
modules/mod_wt_quick_links/src/Driver/Collection и наполнить его данными по образцу, а так же добавить необходимые языковые константы в панели администратора Joomla.Модуль бесплатный. Страница расширенияGitHub расширенияJoomla Extensions Directory👩‍💻 Подпишись на @joomlafeed.#joomla #разработка

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

👩‍💻 Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути

libraries/src/Form/FormField.php, а так же в
libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note"     name="your_note_for_user"     label="Заголовок примечания"     title="Альтернативный способ для заголовка"     description="Текст примечания"     class="col-12 alert alert-info"     heading="h1"     close="true"/>
heading - указывать уровень заголовка.
close - позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён.Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля
Note + то, что мы сами добавим. В XML-манифест добавляем наше поле
<field type="systempluginstatus"      name="systempluginstatus"     addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>
-
type - имя файла и класса,-
addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный-
name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:
<?php// namespace для атрибута addfieldprefixnamespace Joomla\Module\Wtquicklinks\Site\Fields;// нельзя напрямую обращаться к этому файлуdefined('_JEXEC') or die;// подключаем родительский класс для переопределенияuse Joomla\CMS\Form\Field\NoteField;use Joomla\CMS\Language\Text;use Joomla\CMS\Plugin\PluginHelper;// имя класса и имя файла точь-в-точьclass SystempluginstatusField extends NoteField{     protected $type = 'Systempluginstatus';     protected function getLabel()          {               // если плагин не включён               if(PluginHelper::isEnabled('system','wtquicklinks')) {                    // меняем свойства родительского класса                    $this->class = 'alert alert-danger w-100';                    $this->element['label'] = '⚠️ А-а-а-а!';                    $this->element['description'] = 'Плагин не включён!!';                    // и просто рендерим его с нашими свойствами                    return parent::getLabel();               }          // А иначе всё хорошо, скрываем поле из виду.          $this->parentclass = 'd-none';          return '';     }}
Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает.@webtolkru#joomla #php #webdev #разработка

Обновлена информация в Плане развития Joomla

👩‍💻 Обновлена информация в Плане развития Joomla.Здесь собрана информация о датах релизов, описаны принципы версионирования, указаны ответственные за релизы, а так же даты окончания поддержки релизов. Опираясь на эту информацию вы можете планировать развитие ваших интернет-проектов.👩‍💻 Что нового?⛔️ Joomla 4.Дата окончания исправления ошибок безопасности в версии 4.x - 14 октября 2025г. ⚠️ После этой даты Joomla 4 прекратит получать какие-либо обновления, в том числе безопасности - вообще. Рекомендуем обновить ваши сайты до актуальной Joomla 5.✅ Joomla 5.- Дата окончания исправления ошибок в версии 5.x - 13 октября 2026г.- Дата окончания исправления ошибок безопасности в версии 5.x - 12 октября 2027 года.- Текущая актуальная (на момент написания заметки) версия - 5.3.1.- Опубликовано расписание выхода релизов Joomla 5.4. Стабильный релиз ожидается 14 октября 2025 года.✅ Joomla 6.- Дата окончания исправления ошибок в версии 6.x - 17 октября 2028г.- Дата окончания исправления ошибок безопасности в версии 6.x - 16 октября 2029г.- Опубликовано расписание выхода релизов Joomla 6.0. Стабильный релиз ожидается 14 октября 2025 года.- Для разработчиков уже доступна Joomla 6.0.0-alpha1.✅ Joomla! Framework.Обновлена информация о Joomla! Framework - полноценном PHP-фреймворке для разработки. Он в версиях 1.х и 2.х был самостоятельным параллельным проектом, однако начиная с версии Joomla 4.0 стал её основой. Добавлена информация о Joomla! Framework 3.x, который вышел 6 октября 2023 года. Его можно использовать в тех случаях, когда вам в проекте не нужна CMS Joomla целиком.Подробнее на сайте Joomla-сообщества Joomlaportal.ru#joomla #community

0 Пользователей и 1 Гость просматривают эту тему.
  • 20 Ответов
  • 3319 Просмотров
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Пытаюсь при помощи js вытащить список городов с авито (он там наиболее полный). Накидал небольшой скрипт, который должен кликами перебрать все области и считать города внутри. Однако, сразу после первого клика возникает ошибка в консоли браузера:

Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://sntr.avito.ru/api/... (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»).

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

Что странно, когда я считываю города напрямую все норм, а если в цикле, то CORS режет всю малину. Как быть?
« Последнее редактирование: 11.01.2019, 22:27:54 от dm-krv »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
не проверял, но такое вот есть
Код
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
не проверял, но такое вот есть
Код
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

Увы, пишет, что этот флаг более не поддерживается. Корс по прежнему вылезает.


а вот для ФФ https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/

Сейчас проверим...
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
dmitry_stas

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

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
На JS вроде бы кроссбраузерные запросы напрочь запрещены браузерами (если только два домена не договорятся между собой), очень странно как это у вас на JS получился парсер, покажите код если не секрет (если в JS запускается php cURL там или что - тогда не надо, это неспортивно :))
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
На JS вроде бы кроссбраузерные запросы напрочь запрещены браузерами (если только два домена не договорятся между собой), очень странно как это у вас на JS получился парсер, покажите код если не секрет (если в JS запускается php cURL там или что - тогда не надо, это неспортивно :))

Блин( Вот сейчас проверяю и перепроверяю, но правы вы - не работает. Просто перестали предупреждения CORS выводится, а блоки загруженые в аяксе скрипт просто не видит, словно их нет. Код, пожалуйста:
Код
var goroda = '';

setTimeout('document.querySelectorAll("._1ttXp._91ScY")[0].click()', 3000);

setTimeout('document.querySelectorAll("._2icBu._3OKc6")[0].click()', 3000);

function sbor() {

setTimeout(function () {

var oblasti = document.querySelectorAll("._2wkKl");

for(var i = 1; i < oblasti.length; i++) {

oblasti[i].click();

var idname = oblasti[i].innerText;

var id = i;

setTimeout(function(){ parser(idname, id); }, 5000);


}

}, 5000);

}

function parser(oblast, nomer) {



var gorod = document.querySelectorAll("._2wkKl");

for(var i = 1; i < gorod.length; i++) {

goroda = goroda+gorod[i].innerText+'→'+nomer+'←'+oblast+'↑';

}

document.querySelectorAll('.tWeHs')[0].click();

}

Рассчитано на работу на m.avito.ru - пытаюсь собрать в переменную города с авито в нужном мне формате.

Может все же есть какие-то способы считать аяксные блоки? Не может такого быть, чтобы защиту на стороне браузера нельзя было отключить.
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Не может такого быть, чтобы защиту на стороне браузера нельзя было отключить
Может, кроссдомейные JS запросы на уровне браузера невозможны в целях безопасности.
Читать тут

парсить на основе JS не получится от слова никак

Только если два домена знают друг друга и договорятся
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Может все же есть какие-то способы считать аяксные блоки? Не может такого быть, чтобы защиту на стороне браузера нельзя было отключить.
Можно, гуглите в сторону cURL или библиотеки типа simple_html_dom.php, там можно что-то выцепить, но на чистом JS это невозможно
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Можно, гуглите в сторону cURL или библиотеки типа simple_html_dom.php, там можно что-то выцепить, но на чистом JS это невозможно

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

По правде говоря, проблема ведь в чем - когда вручную забиваю в консоль document.querySelectorAll() все прекрасно парсится, но если считывающая функция применяется скриптом, то уже не работает. Не может ли js сам себя перезабить в веб-консоль как-нибудь? Я бы тогда как-нибудь раздели скрипт на мелкие части и это решило бы проблему.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
можно с другой стороны подойти - поставить что то типа https://chrome.google.com/webstore/detail/custom-javascript-for-web/poakhlngfciodnhlhhgnaaelnpjljija и запускать js уже на том сайте, который парсить. а данные считываемые отправлять себе уже в php скрипт на своем сервере
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
можно с другой стороны подойти - поставить что то типа https://chrome.google.com/webstore/detail/custom-javascript-for-web/poakhlngfciodnhlhhgnaaelnpjljija и запускать js уже на том сайте, который парсить. а данные считываемые отправлять себе уже в php скрипт на своем сервере

Неа, ни черта не работает. Например, если попытаться кликнуть что-то внутри блока аякс:
Код
Uncaught TypeError: Cannot read property 'click' of undefined at <anonymous>
Как я понимаю, клик не может быть произведен по анонимному элементу. Радует, что хоть сам элемент ищется, но этого недостаточно.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
все работает, скрипт неправильный
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
все работает, скрипт неправильный

Да, я уже понял) Я дурак пытался стартовать скрипт из консоли, а надо было команду запуска там же внутри плагина писать. В общем, все работает) Осталось только скрипт отладить, он у меня действительно косячный, но это уже просто дело времени. Главное, что решение найдено и данные теперь действительно можно особо не напрягаясь спарсить и вывести.
Огромное спасибо  ^-^

« Последнее редактирование: 11.01.2019, 22:26:54 от dm-krv »
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Допилил парсер и таки вытянул города с авито) Вышел список аж из 3647 позиций, что довольно много. Прикрепляю файл, вдруг кому пригодится. Лично сам собираюсь использовать список этот у себя на сайте, для того, что бы дать посетителю возможность точно выбрать свой город.

Код парсера ниже, использовать надо в Chrome, с плагином (спасибо dmitry_stas за наводку) и исключительно на мобильной версии сайта m.avito.ru
Код
var goroda = ''; // создаем переменную для записи городов и областей

setTimeout('document.querySelectorAll("._1ttXp._91ScY")[0].click()', 4000); // открываем настройки

setTimeout('document.querySelectorAll("._2icBu._3OKc6")[0].click()', 7000); // открываем выбор города

function* sbor() {

var oblastii = document.querySelectorAll("._2wkKl"); // парсим количество областей

for(var i = 1; i < oblastii.length; ++i) { // запускаем цикл равный кол-ву областей

var oblasti = document.querySelectorAll("._2wkKl"); // парсим области

var idname = oblasti[i].innerText; // записываем название области

var id = i; // записываем номер области

oblasti[i].click();  // кликаем области по очереди в цикле

setTimeout(function(){ parser(idname, id); }, 2000);  // запускаем функцию для парсинга городов внутри нажатой области

yield// ставим цикл на задержку

}

}

var iterator = sbor();  // генератор

setTimeout(function(){ iterator.next(); }, 10000);  // запускаем генератор

function parser(oblast, nomer) {


var gorod = document.querySelectorAll("._2wkKl"); // Парсим города

for(var grd = 1; grd < gorod.length; ++grd) {

goroda = goroda+gorod[grd].innerText+' | '+nomer+'. '+oblast+'\r\n'; // Пишем результаты в переменную

}

setTimeout('document.querySelectorAll(".tWeHs")[0].click();', 1000); // Возвращаемся к списку областей

setTimeout(function(){ iterator.next(); }, 2000); // Возозобновляем работу парсера областей после задержки

}

После завершения работы результаты можно сохранить выполнив в консоли:
Код
var textToSave = goroda;

var hiddenElement = document.createElement('a');

hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave);
hiddenElement.target = '_blank';
hiddenElement.download = 'goroda.txt';
hiddenElement.click();
« Последнее редактирование: 17.01.2019, 16:03:05 от dm-krv »
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Пытаюсь при помощи js вытащить список городов с авито (он там наиболее полный).

dm-krv - я вот только сейчас допер вашу изначальную задачу - вам нужна база городов, так не проще использовать готовые базы по типу ОКАТО?

Есть же готовые базы в разных форматах на все города РФ с указанием родителей, уровня вложенности и тд
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
dm-krv - я вот только сейчас допер вашу изначальную задачу - вам нужна база городов, так не проще использовать готовые базы по типу ОКАТО?

Есть же готовые базы в разных форматах на все города РФ с указанием родителей, уровня вложенности и тд

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

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
https://classifikators.ru/okato вот вторая ссылка в Google 27 тыщ записей
Давно не интересовался, но помню что находил базу в 30 с лишним килозаписей с четкой градацией наследования от родителей и полными кодами окато

Еще смотреть тут http://www.gks.ru/opendata/dataset/7708234640-okato, лень качать, но там раньше была подробная структура и актуальная
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
https://classifikators.ru/okato вот вторая ссылка в Google 27 тыщ записей
Давно не интересовался, но помню что находил базу в 30 с лишним килозаписей с четкой градацией наследования от родителей и полными кодами окато

Еще смотреть тут http://www.gks.ru/opendata/dataset/7708234640-okato, лень качать, но там раньше была подробная структура и актуальная

Мда. Похоже я изобретатель велосипедов) В любом случае, потраченого времени не желаю. Один черт, в этих ОКАТО я ни в зуб ногой, запутанно все, а на авито все четко поделено по областям.
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Один черт, в этих ОКАТО я ни в зуб ногой, запутанно все
Там все четко, код региона, под подгериона (области), код города деревни, все это перевязано в цифрах, ничего сложного, вот в вики все есть ОКАТО

А потраченное время - оно всегда полезно, даже если велосипед.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

fsv

  • Живу я здесь
  • 2781
  • 410 / 2
дать посетителю возможность точно выбрать свой город.
подсказки dadata

действительно, сказали бы сразу, что надо...
Веб-разработка: заказ. Только новая разработка.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[РЕШЕНО] Добавить класс при условии JS?

Автор warlocksp

Ответов: 21
Просмотров: 2492
Последний ответ 26.02.2020, 11:07:53
от robert
Программное создание материалов в Joomla 3.8+ [ РЕШЕНО ]

Автор dm-krv

Ответов: 36
Просмотров: 3267
Последний ответ 12.12.2019, 21:06:08
от MDenis
[РЕШЕНО] Защита сайтов друг от друга при помощи open_basedir

Автор dm-krv

Ответов: 14
Просмотров: 5268
Последний ответ 22.04.2019, 17:46:48
от dm-krv
Бесплатный звонок с сайта, через интернет [РЕШЕНО]

Автор dm-krv

Ответов: 8
Просмотров: 717
Последний ответ 03.04.2019, 09:43:32
от dm-krv
360 Zoomer - jQuery вращалка с возможностью увеличения изображения

Автор effrit

Ответов: 2
Просмотров: 632
Последний ответ 01.04.2019, 22:21:22
от effrit