Closed anveno closed 5 months ago
Hast du die $id im repeater? Bitte mal die kompletten Codes zu mblock und dem repeater posten
alt (mform 6)
// base ID
$id = 1;
$mblock = new MForm();
$mblock->addFieldset('Startseite: Slider Item');
$mblock->addSelectField("$id.0.status", array(
''=>'online',
'offline'=>'offline',
), array('label'=>'Status'));
$mblock->addTextField("$id.0.subline",array('label'=>'Overline','maxlength'=>'50'));
$mblock->addTextField("$id.0.headline1",array('label'=>'Headline','maxlength'=>'75'));
$mblock->addMediaField(1,array('types'=>'gif,jpg,png','preview'=>1,'label'=>'Bild','category'=>21));
$mblock->addMediaField(2,array('types'=>'gif,jpg,png','preview'=>1,'label'=>'Bild, kleinere Auflösungen (optional)','category'=>21));
$mblock->addCustomLinkField("$id.0.customlink",
array(
'label' => 'Link (optional)',
'data-tel' => 'disable',
'data-phone' => 'disable',
'ylink' => fr_mform::$yLinkArray
)
);
$mblock->addTextField("$id.0.linktext",array('label'=>'Linktext (Standard: Mehr erfahren)'));
$mblock->addTextField("$id.0.linkanker",array('label'=>'Linkanker'));
//$mblock->addTextField("$id.0.linkparameter",array('label'=>'Linkparameter'));
$mblock->addTextField("$id.0.navtitle",array('label'=>'Navigationstitel','maxlength'=>'80'));
$mblock->closeFieldset();
echo MBlock::show($id, $mblock->show(), array('min'=>1));
neu
use FriendsOfRedaxo\MForm;
$mblock_id = 1;
$mform = MForm::factory()
->addRepeaterElement($mblock_id, MForm::factory()
->addFieldsetArea('Startseite: Slider Item', MForm::factory()
->addSelectField('status', array(
''=>'online',
'offline'=>'offline',
), array('label'=>'Status'))
->addTextField('subline',array('label'=>'Overline','maxlength'=>'50'))
->addTextField('headline1',array('label'=>'Headline','maxlength'=>'75'))
->addMediaField('REX_MEDIA_1',array('types'=>'gif,jpg,png','preview'=>1,'label'=>'Bild','category'=>21))
->addMediaField('REX_MEDIA_2',array('types'=>'gif,jpg,png','preview'=>1,'label'=>'Bild, kleinere Auflösungen (optional)','category'=>21))
->addCustomLinkField('customlink', ['label' => 'Link (optional)', 'data-intern' => 'enable', 'data-extern' => 'enable', 'data-media' => 'enable', 'data-mailto' => 'enable', 'data-tel' => 'disable','ylink' => fr_mform::$yLinkArray])
->addTextField('linktext',array('label'=>'Linktext (Standard: Mehr erfahren)'))
->addTextField('linkanker',array('label'=>'Linkanker'))
->addTextField('navtitle',array('label'=>'Navigationstitel','maxlength'=>'80'))
), true, true, ['btn_text' => 'hinzufügen', 'max' => 15, 'min' => 1]
);
echo $mform->show();
Hi. Du hast recht das Feld ist nicht mehr kompatibel.
hiermit kannst du schon mal die Values konvertieren
<?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 = rex_escape($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>';
?>
@anveno beachte auch bei der Ausgabe dass nun die ID ausgelesen werden muss für das Value und dass links nun mit rex:// ... gespeichert werden
die URL könnte man hiermit auslesen (kommt im nächsten Release)
function getCustomUrl(mixed $value, ?string $lang = null): string
{
// Prüfen ob der Wert ein REDAXO Artikel ist (beginnt mit rex://)
if (str_starts_with($value, 'rex://')) {
$articleId = (int) substr($value, 6); // Entfernt 'rex://' und wandelt den Rest in eine Ganzzahl um
return rex_getUrl($articleId, $lang);
}
// Prüfen ob der Wert numerisch ist
if (is_numeric($value)) {
$articleId = (int) $value;
return rex_getUrl($articleId, $lang);
}
// Wenn der Wert weder eine REDAXO URL noch numerisch ist, gib ihn einfach zurück
return (string) $value;
}```
Description / Beschreibung
Hi. Wenn ich bei einem bestehenden Slice mit Inhalten
$mblock->addCustomLinkField("$id.0.customlink",[...])
zu->addCustomLinkField('customlink',[...])
ändere. Ist das Feld customlink plötzlich leer und Änderungen daran werden auch nicht mehr gespeichert.Erstelle ich ein frischen Block mit dem selben Modul klappt es. Ändere ich den Namen vom Field klappt es.
Affected versions / Verwendete Versionen
MForm8