Новости Joomla

👩‍💻 Joomla включена в программу Google Summer of Code 2026.

👩‍💻 Joomla включена в программу Google Summer of Code 2026.

Google Summer of Code (GSoC) - программа компании Google, которая позволяет участникам программы под руководством опытных наставников писать код для организаций, занимающейся открытым исходным кодом. Joomla принимает участие в этой программе не в первый раз и в 2026 году снова включена в список GSoC. Для программы утверждается список "идей", воплотить которые должны участники под руководством наставников.

Проекты Joomla в рамках программы GSoC 2026.

Проект I: Ajax-бэкенд.
- Действия в административной панели без необходимости обновлять страницу.
- Автоматическое сохранение содержимого во время редактирования.
- Расширенный фильтр - поиск и фильтрация по пользовательским полям.

Проект II: Автоматизация рабочих процессов (workflow + task scheduler).
Joomla имеет функцию процессов и планировщика задач. Теперь эти две функции следует объединить, чтобы пользователь мог настраивать назначенные рабочие процессы таким образом, чтобы переходы выполнялись автоматически, с возможностью точного определения времени. Должна быть возможность создавать циклы или прямые запланированные рабочие процессы. Предполагается, что интерфейс должен учитывать хороший пользовательский опыт, удобство использования и современные стандарты доступности. Ожидается, что будет добавлен интерфейс для управления процессами и их расписанием на страницах категорий и материалов. Так же ожидается, что сторонние компоненты также смогут воспользоваться этим функционалом.

Проект III: Мультикатегории.
В настоящее время Joomla! не позволяет назначать один элемент нескольким категориям. Хотя система тегов часто используется в качестве замены, существует острая потребность в нативной поддержке нескольких категорий, чтобы привести Joomla! в соответствие с другими современными системами управления контентом.

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

Принять участие GSoC 2026
Подробнее о проектах Joomla GSoC 2026
Чат GSoC в Mattermost (международное сообщество Joomla)

Вышли релизы Joomla 6.0.3 и Joomla 5.4.3

Релиз Joomla 6.0.3 и Joomla 5.4.3

Проект Joomla рад сообщить о выпуске Joomla 6.0.3 и Joomla 5.4.3. Это релиз исправлений ошибок и улучшений для серии Joomla 6.0 и Joomla 5.4.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

В процессе работы с Joomla бывает необходимо работать с пользовательским интерфейсом более тонко, чем обычно. Все формы Joomla состоят из стандартных полей, содержанием, стилем отображения, состоянием (включено/выключено, доступно для редактирования или нет и т.д.) можно управлять с помощью плагинов. Да и для нестандартных проектов хорошей практикой является создание одного системного или нескольких плагинов групп "под проект", в которых храниться весь "нестандарт".

В этой статье описаны все триггеры, которые вызываются через Event Dispatcher из administrator/components/com_fields/src/Helper/FieldsHelper.php, с привязкой к жизненному циклу (порядку этапов работы запроса), аргументам, изменяемым данным и дальнейшему распространению по Joomla. Это поможет вам работать с Joomla свободнее и не опасаясь при этом потерять изменения при очередном обновлении движка.

Подходы, описанные в статье, полезны в тех случаях, когда вы работаете с данными в com_fields - механизме создания и редактирования пользовательских полей ядра Joomla и при использовании FieldsHelper. Многие сторонние компоненты не используют эту возможность, поэтому данная статья будет полезна лишь частично.

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

w00

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
В общем у меня есть компонент для импорта цен на товары, мне нужно что бы из того же excel файла заносилась еще одна колоночка с данными о наличии товара.
admin.vmimporttool
Код
<?php
/** PHPExcel */
require_once 'includes/PHPExcel.php';
/** PHPExcel_IOFactory */
require_once 'includes/PHPExcel/IOFactory.php';

class VMImportTool {
const SKU_COL_NAME = 'Art';
const PRICE_COL_NAME = 'Pr_Rn';

const PRODUCT_CURRENCY = 'RUB';

private static $excelReader = null;

function __construct() {
$this->excelReader = PHPExcel_IOFactory::createReader('Excel2007');
$this->excelReader->setReadDataOnly(true);
}

private $rowCount = 0;
private $importCount = 0;

public function uploadFile($file) {

$this->rowCount = 0;
$this->importCount = 0;

$objExcel = @$this->excelReader->load($file);
if(!$objExcel) return false;
$objWorksheet = @$objExcel->getActiveSheet();
if(!$objWorksheet) return false;

$rowIterator = $objWorksheet->getRowIterator();
$skuCol = false;
$priceCol = false;
$isFindHeader = false;
foreach ($rowIterator as $row) {
if(!$isFindHeader) {
$cellIterator = $row->getCellIterator();
foreach ($cellIterator as $cell) {
if($cell->getValue() == self::SKU_COL_NAME) {
$skuCol = $cellIterator->key();
$isFindHeader = true;
}
if($cell->getValue() == self::PRICE_COL_NAME) {
$priceCol = $cellIterator->key();
$isFindHeader = true;
}

}
if($isFindHeader && ($skuCol===false || $priceCol===false)) {
return false;
}

  }
else {
  $cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // This loops all cells
$sku = '';
$price = '';
foreach ($cellIterator as $cell) {
if($cellIterator->key() == $skuCol) {
$sku = strip_tags(trim($cell->getValue()));
}
if($cellIterator->key() == $priceCol) {
$price = round(floatval($cell->getValue()),2);
}
  }
  if($this->import($sku, $price)) $this->importCount++;

$this->rowCount++;
}
}
return $this->rowCount;
}

protected function import($sku, $price) {
if(!$sku || !$price) return false;
global $database;
$database->setQuery("SELECT product_id FROM #__vm_product WHERE product_sku='$sku'");
$product_id = $database->loadResult();
if($product_id) {
$database->setQuery("SELECT product_price_id FROM #__vm_product_price WHERE product_id=$product_id");
$product_price_id  = $database->loadResult();
$update_time = time();
if($product_price_id) {
$database->setQuery("UPDATE #__vm_product_price SET product_price=$price, product_currency='".self::PRODUCT_CURRENCY."', mdate=$update_time WHERE product_id=$product_id");
$database->query();
}
else {
$database->setQuery("SELECT shopper_group_id FROM #__vm_shopper_group WHERE `default`=1");
$shopper_group_id  = $database->loadResult();
$database->setQuery("INSERT INTO #__vm_product_price(product_id, product_price, product_currency,cdate,mdate,product_price_vdate,product_price_edate,shopper_group_id) VALUES($product_id,$price,'".self::PRODUCT_CURRENCY."',$update_time,$update_time,0,0,$shopper_group_id)");
$database->query();
}
return true;
}
return false;
}

public function getImportStat() {
return array('rows_imported' => $this->importCount, 'rows_count' => $this->rowCount);
}
}
?>
vmimporttool.class
Код
<?php
defined( '_VALID_MOS' ) or die( 'Доступ Запрещен' );

if($task == 'load') {
submitRequest();
}

echo '<form enctype="multipart/form-data" action="index2.php?option=' . $option .'" method="post" name="filename">';
echo '<input type="hidden" name="option" value="'.$option.'">';
echo '<input type="hidden" name="act" value="'.$act.'">';
echo '<input type="hidden" name="task" value="load">';
echo '<table class="adminform"><tr><th>Импорт данных о ценах продукции</th></tr>
<tr><td align="left">Файл : <input class="text_area" name="userfile" type="file" size="100"/><input class="button" type="submit" value="Загрузить" /></td></tr>
</table>';
echo '</form>';



/**
*/
function submitRequest(  ) {
global $mainframe;
require_once( $mainframe->getPath( 'class' ) );

// Check if file uploads are enabled
if (!(bool)ini_get('file_uploads')) {
showMessage( "Импорт данных невозможен, пока запрещена загрузка файлов.", 'Ошибка импорта данных');
return;
}


$userfile = mosGetParam( $_FILES, 'userfile', null );

if (!$userfile || $userfile[error] || !$userfile[tmp_name] ) {
showMessage( 'Выберите файл для импорта данных', 'Ошибка импорта данных');
return;
}

$importTool = new VMImportTool();

$result = $importTool->uploadFile($userfile[tmp_name]);

if ($result !== false) {
$stat = $importTool->getImportStat();
showMessage( 'Данных из файла ' . $userfile[name] . ' загружены в систему. Просмотренно ' . $stat[rows_count] .' строк, затронутто ' . $stat[rows_imported] . ' записей', 'Загрузка данных завершена' );
} else {
showMessage( 'Во время загрузки произошла ошибка. Убедитесь, что выбранный файл верен и попробуте еще раз.', 'Ошибка импорта данных' );
}
}

/**
* @param string
* @param string
* @param string
*/
function showMessage( $message, $title) {
echo '<br /><table class="adminheading"><tr><th class="install">'.$title.'</th></tr></table>';
echo '<table class="adminform"><tr><td align="left"><strong>'.$message.'</strong></td></tr></table><br />';
}
 ?>

Сам php не знаю, помогите доделать пожалуйста  !
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

1C УТ 8.x &lt;-&gt; VirtueMart по протоколу CommerceML

Автор Centoff

Ответов: 1315
Просмотров: 224223
Последний ответ 27.10.2020, 15:32:10
от Leo1986
Импорт из CSV товаров с типами и свойствами из

Автор Gruz

Ответов: 499
Просмотров: 155916
Последний ответ 23.02.2017, 15:15:42
от orchanin
Как импортировать файл XML в Joomla VirtueMart?

Автор Кот Смюлан

Ответов: 2
Просмотров: 6302
Последний ответ 14.07.2016, 18:40:24
от Berzerker
импорт товаров в YML Яндекс маркет

Автор zmeyx

Ответов: 5
Просмотров: 12576
Последний ответ 14.07.2016, 18:34:28
от Berzerker
Общие вопросы по j1.5.26+vm1.1.9+импорт из 1С

Автор alexzhimuk

Ответов: 2
Просмотров: 4120
Последний ответ 06.05.2016, 15:28:04
от alexzhimuk