MForm CustomLink Converter
Mit diesem Skript können alte Custom-Links in das neue Format ab MForm 8 konvertieert werden.
- DB-Backup anlegen
- Modul oder Template mit dem nachfolgenden SkriptCode anlegen
- Lege in
$column
das REDAXO Value fest in dem gesucht werden soll - Wähle das
$node
das konvertiert werden soll. Angenommen das Feld war so definiert$mform->addCustomLinkField("$id.0.mylink", array('label' => 'Link'));
, dann lautet das node:mylink
- Lege die
$moduleId
fest des Moduls in dem gesucht werden soll.
<?php
// Define the parameters
$column = 'value1'; // column
$node = 'customlink'; // node
$moduleId = 48; // module_id
// Fetch all records from the rex_article_slice table where module_id is the specified value
$sql = rex_sql::factory();
$sql->setQuery("SELECT id, $column FROM rex_article_slice WHERE module_id = ?", [$moduleId]);
foreach ($sql as $row) {
$id = $row->getValue('id');
$jsonData = $row->getValue($column);
// Decode JSON data
$data = json_decode($jsonData, true);
// Check if decoding was successful and if the data is an array
if (json_last_error() === JSON_ERROR_NONE && is_array($data)) {
$modified = false;
// Traverse the JSON array and modify customlink nodes
foreach ($data as &$item) {
if (isset($item[$node])) {
$value = $item[$node];
// Check if the value is already in the desired format
$isNewFormat = is_array($value) && isset($value['name']) && isset($value['id']);
if (!$isNewFormat) {
if (is_numeric($value)) {
$articleId = (int)$value;
// Artikelobjekt laden
$article = rex_article::get($articleId);
$articleName = "article not found redaxo://$value";
if ($article) {
// Artikelname abrufen
$articleName = $article->getName();
}
$item[$node] = [
'name' => "$articleName",
'id' => "redaxo://$value"
];
} else {
$item[$node] = [
'name' => "$value",
'id' => "$value"
];
}
$modified = true;
}
}
}
// If data was modified, update the database
if ($modified) {
$updatedJsonData = json_encode($data);
$updateSql = rex_sql::factory();
$updateSql->setTable('rex_article_slice');
$updateSql->setWhere(['id' => $id]);
$updateSql->setValue($column, $updatedJsonData);
$updateSql->update();
echo "Updated record ID $id<br>";
}
} else {
// Log or handle invalid JSON data if necessary
echo "Invalid JSON data in record ID $id<br>";
}
}
echo "Conversion completed.<br>";
?>
<?php
echo '<pre>';
print_r(rex_var::toArray("REX_VALUE[1]"));
echo '</pre>';
?>