-
|
Den Extension Point YFORM_DATA_TABLE_EXPORT habe ich gefunden. |
Beta Was this translation helpful? Give feedback.
Answered by
tbaddade
Nov 14, 2025
Replies: 2 comments 3 replies
-
|
boot.php Entweder als Klassen-Aufruf if (rex::isBackend() && rex::getUser() && rex_request('table_name', 'string', '') === 'rex_yf_table_1') {
rex_extension::register('YFORM_DATA_TABLE_EXPORT', 'Project\Export\Table\Table_1::export');
}Oder direkt <?php
rex_extension::register('YFORM_DATA_TABLE_EXPORT', static function (rex_extension_point $ep) {
/** @var rex_yform_manager_query $query */
$query = $ep->getSubject();
$tableNames = [
'rex_yf_table_1',
'rex_yf_table_2',
];
$tableName = $query->getTable()->getTableName();
if (!in_array($tableName, $tableNames)) {
return $query;
}
$ignoreFields = array(
'created_at',
'updated_at',
);
// Build table header
// Copied from data_export.php
$fields = ['id' => '"ID"'];
foreach ($query->getTable()->getFields() as $field) {
if ('value' == $field->getType() && 'none' != $field->getDatabaseFieldType() && !in_array($field->getName(), $ignoreFields)) {
$fields[$field->getName()] = '"' . $field->getLabel() . '"';
}
}
// End
// Manipulate table cells
$rows = [];
$datasetCounter = 0;
foreach ($query->find() as $dataset) {
$row = [];
$datasetCounter++;
foreach ($fields as $fieldName => $fieldValue) {
$value = $dataset->getValue($fieldName) ?? '';
$value = str_replace(['"', "\n", "\r"], ['""', '', ''], $value);
// Manipulate dataset values by table
switch($tableName) {
case 'rex_yf_table_1':
if ('id' === $fieldName) {
// neue Id > YY0001 bis max YY9999
$value = substr($dataset->getValue('year'), 2, 2) . str_pad($datasetCounter, 4, '0', STR_PAD_LEFT);
}
break;
case 'rex_yf_table_1':
if ('id' === $fieldName) {
// neue Id > YY001F bis max YY999F
$value = substr($dataset->getValue('year'), 2, 2) . str_pad($datasetCounter, 3, '0', STR_PAD_LEFT) . 'F';
}
if ('bool_field' === $fieldName) {
$value = ($value == 'x') ?? '';
}
break;
}
// Manipulate dataset values
if ('user_id' === $fieldName) {
$user = \rex_ycom_user::get($dataset->getValue('user_id'));
$value = $user->getValue('name').', '.$user->getValue('firstname');
}
$row[$fieldName] = '"'.$value.'"';
}
$rows[] = implode(';', $row);
}
$fileContent = pack('CCC', 0xef, 0xbb, 0xbf);
$fileContent .= implode(';', $fields);
$fileContent .= "\n".implode("\n", $rows);
$fileName = 'export_data_' . date('YmdHis') . '.csv';
header('Content-Disposition: attachment; filename="' . $fileName . '"; charset=utf-8');
rex_response::sendContent($fileContent, 'application/octetstream');
exit;
});
|
Beta Was this translation helpful? Give feedback.
3 replies
Answer selected by
tyrant88
-
|
Für (m)einen einfachen Fall (wollte nur ein Feld mit dem Produktnamen aus der Detailtabelle hinzufügen) genügte: |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
boot.php
Entweder als Klassen-Aufruf
Oder direkt