Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

Biss

  • Давно я тут
  • 995
  • 101 / 0
Кто работал с PhpSpreadsheet?
« : 28.08.2022, 13:37:55 »
Помогите пожалуйста решить вопрос. Уже сколько не пробовал, не получаетя с загрузкой файлов. На локалке все норм а на хостинге ошибка Fatal error: Uncaught PhpOffice\PhpSpreadsheet\Reader\Exception: File "1661539984.xlsx" does not exist.
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #1 : 28.08.2022, 13:55:44 »
значит неправильный путь к файлу указываете. пропишите полный путь с директорией
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #2 : 28.08.2022, 15:26:13 »
Да как только не писал и полн. и короткий.   и никак, у меня такие подозрения что файл не может загрузится в временную папку и изза того и проблема. Делал по примеру https://www.fundaofwebit.com/php/import-excel-file-into-mysql-database-in-php
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #3 : 28.08.2022, 16:41:05 »
Закиньте файл по ftp и тестируйте
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

marksetter

  • Завсегдатай
  • 1045
  • 40 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #4 : 28.08.2022, 16:54:32 »
права на папку смотрите
если она формируется
если нет то руками
библиотека рабочая, использую много где
индивидуальная помощь: @SetAlexx
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #5 : 28.08.2022, 18:06:14 »
Библиотека то рабочая я знаю на локальном все ок а на сервере не получается. По ftp файл загружал и скрипт его нормально читает. Проверял в какую папку должно грузить, написало /tmp а как узнать полний путь?
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Кто работал с PhpSpreadsheet?
« Ответ #6 : 28.08.2022, 18:11:39 »
File "1661539984.xlsx" does not exist.
Как Вы получаете этот файл 1661539984.xlsx
Если Вы загружаете файл на сервер в браузере то вам нужен путь к временному загруженному файлу
Код: php
$file_path = $_FILES['FILE']['tmp_name'];
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #7 : 28.08.2022, 18:22:13 »
Вот код из моих файлов
Код
     <form method="POST" id="import_excel_form" enctype="multipart/form-data"> 
      <span id="message"></span>
        <input type="file" name='import_excel' class="form-control"/>
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">&#10005;</button>
        <input type="submit" name="import" id="import" class="btn btn-primary" value="Import" />
      </form>
<script>
$(document).ready(function(){
  $('#import_excel_form').on('submit', function(event){
    event.preventDefault();
    $.ajax({
      url:"cat_import.php",
      method:"POST",
      data:new FormData(this),
      contentType:false,
      cache:false,
      processData:false,
      beforeSend:function(){
        $('#import').attr('disabled', 'disabled');
        $('#import').val('Importing...');
      },
      success:function(data)
      {
        $('#message').html(data);
        $('#import_excel_form')[0].reset();
        $('#import').attr('disabled', false);
        $('#import').val('Import');
      }
    })
  });
});
</script>
<?php
require '../db.php';
require '../lib/autoload.php';

if($_FILES['import_excel']['name'] != ''){

$allowed_extension = array('xls','csv','xlsx');
$file_array     = explode('.', $_FILES['import_excel']['name']);
$file_extension = end($file_array);

if(in_array($file_extension, $allowed_extension)){
$file_name = time(). '.' . $file_extension;
move_uploaded_file($_FILES['import_excel']['tmp_name'], $file_name);

$file_type   = \PhpOffice\PhpSpreadsheet\IOFactory::identify($file_name);
$reader      = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($file_type);
$spreadsheet = $reader->load($file_name);
unlink($file_name);
$data        = $spreadsheet->getActiveSheet()->toArray();

$count       = "0";
foreach($data as $row){
if($count > 0){
$sub_cat_name   = $row['0'];
$sub_cat_code   = $row['1'];
$sub_cat_parent = $row['2'];
$sub_cat_desc   = $row['3'];
$query          = "INSERT INTO e_sub_cat (sub_cat_name, sub_cat_code, sub_cat_parent, sub_cat_desc) VALUES ('$sub_cat_name', '$sub_cat_code', '$sub_cat_parent', '$sub_cat_desc')";
$result         = mysqli_query($link, $query);
}
else
{
$count = "1";
}
}


$message = '<div class="alert alert-success">Data Imported Successfully</div>';

}
else
{
$message = '<div class="alert alert-danger">Only .xls .csv or .xlsx file allowed</div>';
}
}
else
{
$message = '<div class="alert alert-danger">Please Select File</div>';
}

echo $message;

?>
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Кто работал с PhpSpreadsheet?
« Ответ #8 : 28.08.2022, 18:26:04 »
Попробуйте вот так
Код: php
$spreadsheet = $reader->load($_FILES['import_excel']['tmp_name']);
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #9 : 28.08.2022, 18:29:50 »
То же самое
Код
Fatal error: Uncaught PhpOffice\PhpSpreadsheet\Reader\Exception: File "1661700536.xlsx" does not exist. in /home/biss466/domains/chas-tv.in.ua/public_html/demo/1/WorkTime/lib/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:149 Stack trace: #0 /home/biss466/domains/chas-tv.in.ua/public_html/demo/1/WorkTime/lib/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php(129): PhpOffice\PhpSpreadsheet\Shared\File::assertFile('1661700536.xlsx') #1 /home/biss466/domains/chas-tv.in.ua/public_html/demo/1/WorkTime/lib/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php(110): PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile('1661700536.xlsx', NULL) #2 /home/biss466/domains/chas-tv.in.ua/public_html/demo/1/WorkTime/stock/cat_import.php(17): PhpOffice\PhpSpreadsheet\IOFactory::identify('1661700536.xlsx') #3 {main} thrown in /home/biss466/domains/chas-tv.in.ua/public_html/demo/1/WorkTime/lib/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php on line 149
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Кто работал с PhpSpreadsheet?
« Ответ #10 : 28.08.2022, 18:30:48 »
Покажите что будет выводиться!
Код: php
echo '<pre>' . print_R($_FILES['import_excel'], 1); exit;
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #11 : 28.08.2022, 18:35:17 »
Array
(
    [name] => 1.xlsx
    [type] =>
    [tmp_name] =>
    [error] => 6
    [size] => 0
)
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Кто работал с PhpSpreadsheet?
« Ответ #12 : 28.08.2022, 18:37:35 »
Значит что то с загрузкой файла!
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #13 : 29.08.2022, 20:42:55 »
Так и ничего не получилось, хостер написал
Код
Права на файл дают возможность записи, мы проверили это, добавив код:
putenv('TMPDIR=/home/biss466/domains/chas-tv.in.ua/public_html/demo/tmp');
echo substr(sprintf('%o', fileperms(sys_get_temp_dir())), -4);

Уже после загрузки временная папка меняется на корневую "/tmp" вместо указанной.Нужно проверить где оно меняет её и отключить этот фрагмент кода, либо изменить.
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Кто работал с PhpSpreadsheet?
« Ответ #14 : 29.08.2022, 21:10:39 »
Так и ничего не получилось, хостер написал
Код
Права на файл дают возможность записи, мы проверили это, добавив код:
putenv('TMPDIR=/home/biss466/domains/chas-tv.in.ua/public_html/demo/tmp');
echo substr(sprintf('%o', fileperms(sys_get_temp_dir())), -4);

Уже после загрузки временная папка меняется на корневую "/tmp" вместо указанной.Нужно проверить где оно меняет её и отключить этот фрагмент кода, либо изменить.
Не пойму к чему это?
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #15 : 29.08.2022, 21:33:51 »
Array
(
    [name] => 1.xlsx
    [type] =>
    [tmp_name] =>
    [error] => 6
    [size] => 0
)

https://www.php.net/manual/ru/features.file-upload.errors.php
 UPLOAD_ERR_NO_TMP_DIR
    Значение: 6; Отсутствует временная папка.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #16 : 29.08.2022, 23:15:03 »
https://www.php.net/manual/ru/features.file-upload.errors.php
 UPLOAD_ERR_NO_TMP_DIR
    Значение: 6; Отсутствует временная папка.
Так и я им про то же писал. А какой у вас параметр upload_tmp_dir
« Последнее редактирование: 29.08.2022, 23:22:18 от Biss »
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #17 : 30.08.2022, 08:37:48 »
А какой у вас параметр upload_tmp_dir
в php-fpm.conf прописано:
Код
php_admin_value[upload_tmp_dir] = /tmp
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #18 : 30.08.2022, 11:59:12 »
У меня нет доступа к таким файлам, хостинг. Но у меня догадки что там не должно писать no value
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #19 : 30.08.2022, 12:09:58 »
Но у меня догадки что там не должно писать no value
на одном из сайтов именно такое значение и все работает. скорее всего в этом случае используется дефолтное значение "/tmp". А в вашем случае похоже, что нет прав к этому тмп, о чем и писалось выше.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #20 : 31.08.2022, 14:30:25 »
на одном из сайтов именно такое значение и все работает. скорее всего в этом случае используется дефолтное значение "/tmp". А в вашем случае похоже, что нет прав к этому тмп, о чем и писалось выше.
А вы можете протестировать мой код у себя на хостинге или сервере там где есть эта библиотека. Я просто в тупике сейчас и не знаю куда дальше копать.
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #21 : 31.08.2022, 15:23:09 »
А вы можете протестировать мой код у себя на хостинге или сервере там где есть эта библиотека. Я просто в тупике сейчас и не знаю куда дальше копать.
хтмл-форму + js ? могу - с ними проблем нет. вот такой результат в $_FILES:
Код
Array
(
    [import_excel] => Array
        (
            [name] => Без имени 1.odt
            [type] => application/vnd.oasis.opendocument.text
            [tmp_name] => /tmp/phpm0rezX
            [error] => 0
            [size] => 15680
        )

)
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #22 : 31.08.2022, 15:31:46 »
Вложение
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #23 : 31.08.2022, 15:35:48 »
Проблема у вас с отправкой (точнее - приемкой) файла, а не с кодом по его чтению. Проверяйте права записи на папку /tmp
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #24 : 31.08.2022, 15:49:42 »
Подскажите мне последовательность действий. Где эта папка находится
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #25 : 31.08.2022, 16:23:55 »
Подскажите мне последовательность действий. Где эта папка находится
в корне файловой системы.
Создайте пхп-скрипт:
Код
<?php
file_put_contents('/tmp/test.txt', 'test');
echo file_get_contents('/tmp/test.txt');
?>

OK
и откройте его через браузер. если слово "test" отобразится, до доступ есть

или зайдите по ssh и проверьте там (при наличии такой возможности)
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Re: Кто работал с PhpSpreadsheet?
« Ответ #26 : 05.09.2022, 10:18:34 »
Не выяснил в чем беда. Просто сейчас все перекинул на другой акаунт тот же хостинг (свои причины) и оно всё сразу заработало  *suicide*
Upd
Беда в хостинге, чтото там с правами не порядок, перезагр. акаунт и стало все норм.
« Последнее редактирование: 16.06.2024, 10:34:49 от Biss »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться