когда я создаю значок в Moodle 3.5, ядро автоматически создает 3 больших пальца для значка значка (35x35, 100x100, 512x512). Я должен увеличить размер большого пальца 100x100, но этот размер жестко запрограммирован в основном пакете: /lib/gdlib.php, function process_new_icon (), строки 184 214 228.
Как лучше всего достичь моей цели, не взламывая файлы ядра? Может быть, локальный плагин сможет переопределить функцию ядра?
Спасибо
Я все еще ничего не пробовал: я просто исследовал код и обнаружил, что параметр, который мне нужно изменить, жестко запрограммирован в основной функции. Я не нашел в документации решения для переопределения основной функции, поэтому мне было интересно, есть ли лучшая практика или у кого-то была такая же проблема. Если вы считаете это полезным, я могу скопировать / вставить основную функцию в ответ.
Вызывает ли функция в ядре какие-либо ловушки / действия, которые может использовать плагин?
Нет, насколько я понимаю ... но поскольку я новичок, вот исходный файл: github.com/moodle/moodle/blob/master/lib/gdlib.php, функция находится в строке 104 (спасибо за терпение ...). По сути, мне просто нужно было переключить «100» на «xxx».






Создайте плагин. Напишите ту же функцию (используйте папку классов с вашим собственным классом, он загружается автоматически), но с переменной шириной.
Найдите скрипт, создающий значки. Используйте функцию customscripts, чтобы заменить скрипт вашим собственным, который использует вашу недавно созданную функцию.
Странно, не могу заставить работать автозагрузчик. Я поместил простой класс с именем local_badgesize в /local/badgesize/classes/badgesize.php, но class_exists ('local_badgesize') по-прежнему возвращает false после очистки кеша. Плагин правильно отображается в админке, я упустил что-то очевидное?
Спасибо, Евгений, ваше решение работает отлично. Сейчас покопаюсь, чтобы понять, почему не работает автозагрузка (временно использую require_once). Возможно, я даже добавлю некоторые пользовательские настройки где-нибудь в админке, чтобы размеры можно было устанавливать на стороне сервера, а не жестко задавать в некоторых сценариях .php. Если у вас хватит терпения помочь мне и с автозагрузкой ... еще раз спасибо :) Кстати, ответ принят!
Автозагрузка работает автоматически для любого класса внутри папки классов. Если это не сработает для вас, попробуйте использовать namespace local_yourpluginname; и назовите класс точно так же, как назван файл, например /classes/badgesize.php и имя класса badgesize с пространством имен local_badgesize
класс namespacing правильно исправил это: я просто писал «использовать local_badgesize» вместо «использовать local_badgesize \ badgesize;». Теперь все в порядке, спасибо!
Это старое обсуждение, но я нашел решение, на мой взгляд, похожей проблемы. У меня есть онлайн-курсы для детей, и значки - хороший инструмент для геймификации. Но мне не понравились маленькие картинки, показанные в обзорной таблице значков, или отдельный вид значков, который не очень хорош - особенно для детей. С фантастической помощью Джона Болтона я добился изменения в два этапа:
Это ссылка на наше обсуждение на форуме Moodle: https://moodle.org/mod/forum/discuss.php?d=401347
Будет очень сложно оказать какую-либо помощь, если вы не покажете код или не попытаетесь решить проблему самостоятельно.