Heim > Fragen und Antworten > Hauptteil
Diese Frage bezieht sich mehr auf den Prozess/die Logik, die ich in Bezug auf „SCALE“ implementieren möchte, als darauf, wie der Code geschrieben wird.
In WordPress habe ich mehrere Formulare, die als HTML geladen werden, um ein neues „Ereignis“ zu protokollieren, wenn der Benutzer einen benutzerdefinierten Beitrag erstellt (eigentlich einen neuen Datenbankeintrag für diejenigen, die mit CMS nicht vertraut sind), Zeit zum Laden. Ich möchte nicht alles manuell zuordnen, da hier update_post_meta()
来设置数据库条目/文章的名称和值 - 所以当提交表单时,我使用php循环foreach ($_POST as $name => $value) {
zum Auffüllen aller Datenbanktabellen für dieses Ereignis verwendet wird.
Das funktioniert gut, aber wenn der Benutzer jetzt das Formular speichert und später zurückkommt, um es zu bearbeiten, möchte ich, dass der Wert wie folgt zurückgegeben wird, sofern er vorhanden ist:
<label for="reported_by">报告人(全名)</label> <?php $reported_by = get_post_meta($incident_id, 'reported_by', true); ?> <input type="text" name="reported_by" value="<?php echo $reported_by; ?>">
Auch dieser Ansatz funktioniert gut, aber ich habe fast 500 Felder auf dieser Seite, daher würde das manuelle Festlegen eindeutiger Variablen (in diesem Fall $reported_by
) für jedes Feld viel Zeit in Anspruch nehmen und im Grunde genommen die Codebasis um fast 50 % erhöhen schwierig zu warten und ineffizient.
Irgendwelche Ideen, wie man dieses Problem lösen kann? Verständlicherweise kann ich das Formular über PHP erstellen und es in HTML wiedergeben, aber auch das fühlt sich wie ein sehr manueller Prozess an. PHP ist serverseitig, daher kann ich den Namenswert des Tags/der Eingabe auf der Clientseite nicht einfach abrufen, es sei denn, ich verwende AJAX, aber ich habe das Gefühl, dass das auch ziemlich manuell werden würde.
Ich bin also jedenfalls mit einer Menge doppeltem Aufwand konfrontiert, es sei denn, es gibt eine Möglichkeit, diesen Prozess einfacher auf alle 500 Felder skalierbar zu machen, ohne dass ich die Variablennamen manuell festlegen muss.
Vielen Dank für Ihre Zeit!
P粉3080890802023-09-11 11:38:54
首先要注意的是,你实际上并不需要为每个表单输入项创建一个不同命名的局部变量。也就是说,不需要这样写:
<label for="reported_by">报告人(全名)</label> <?php $reported_by = get_post_meta($incident_id, 'reported_by', true); ?> <input type="text" name="reported_by" value="<?php echo $reported_by; ?>">
你可以这样写:
<label for="reported_by">报告人(全名)</label> <?php $current_value = get_post_meta($incident_id, 'reported_by', true); ?> <input type="text" name="reported_by" value="<?php echo $current_value; ?>">
为什么这样有帮助呢?因为现在只有两个与此输入项相关的内容:
这两个都只是字符串,所以很容易提取到PHP变量中:
<?php $field_name = 'reported_by'; $label = '报告人(全名)'; ?> <label for="<?php echo $field_name; ?>"><?php echo htmlspecialchars($label); ?></label> <?php $current_value = get_post_meta($incident_id, $field_name, true); ?> <input type="text" name="<?php echo $field_name; ?>" value="<?php echo $current_value; ?>">
这些看起来很像参数,所以让我们把它变成一个函数,同时记得也传入$incident_id
:
<?php function display_input($incident_id, $field_name, $label) { ?> <label for="<?php echo $field_name; ?>"><?php echo htmlspecialchars($label); ?></label> <?php $current_value = get_post_meta($incident_id, $field_name, true); ?> <input type="text" name="<?php echo $field_name; ?>" value="<?php echo $current_value; ?>"> <?php } display_input($incident_id, 'reported_by', '报告人(全名)');
现在,你只需要调用display_input
函数500次就可以显示500个输入项。为了避免这样,可以使用一个数组和foreach
循环:
$fields = [ 'reported_by' => '报告人(全名)', ]; foreach ( $fields as $field_name => $label ) { display_input($incident_id, $field_name, $label); }
然后,你可以从配置文件或数据库表中获取数组,而不是硬编码。你已经自动化了重复的部分(渲染HTML的细节),只剩下“有趣”的部分:定义要显示的字段列表。
如果某些字段需要稍微不同,你可以向函数(和配置数组)添加一些额外选项,但只要变化不多,代码应该保持相当简单明了。