我尝试开发一个小部件,它支持创建表的功能。用户可以确定需要多少列和行,这一点很重要。我已经在后端生成了用户特定数量的输入字段。我的问题是无法保存输入字段中的内容。为此,我在update方法中使用For循环。
我希望有人能指引我走向正确的方向。
非常感谢你!
我的代码:
class table_widget extends WP_Widget {
function __construct() {
$widget_ops = array(
\'classname\' => \'table_det_widget\',
\'description\' => \'Tabelle erstellen\',
);
parent:: __construct(false, $name = __(\'Tabelle\'), $widget_ops);
}
function form($instance) { /*Ausgabe im Backend*/
echo \'<label for="\' . $this->get_field_id(\'wp_table_title\') . \'">Überschrift: </label>\';
echo \'<input class="widefat" type="text" value="\' . $instance[\'wp_table_title\'] .\'" name="\' . $this->get_field_name(\'wp_table_title\') . \'" id="\' . $this->get_field_id(\'wp_table_title\') . \'" >\';
echo \'<label for="\' . $this->get_field_id(\'wp_table_subtitle\') . \'">Unterüberschrift: </label>\';
echo \'<input class="widefat" type="text" value="\' . $instance[\'wp_table_subtitle\'] .\'" name="\' . $this->get_field_name(\'wp_table_subtitle\') . \'" id="\' . $this->get_field_id(\'wp_table_subtitle\') . \'" >\';
echo \'<label for="\' . $this->get_field_id(\'wp_column\') . \'">Spalten: </label>\';
echo \'<input class="widefat" type="text" value="\' . $instance[\'wp_column\'] .\'" name="\' . $this->get_field_name(\'wp_column\') . \'" id="\' . $this->get_field_id(\'wp_column\') . \'" >\';
echo \'<label for="\' . $this->get_field_id(\'wp_line\') . \'">Zeilen pro Spalte: </label>\';
echo \'<input class="widefat" type="text" value="\' . $instance[\'wp_line\'] .\'" name="\' . $this->get_field_name(\'wp_line\') . \'" id="\' . $this->get_field_id(\'wp_line\') . \'" >\';
if($instance[\'wp_column\'] == \'\' || $instance[\'wp_line\'] == \'\') {
echo \'Bitte beide Felder ausfüllen!\';
} else {
$spalten = $instance[\'wp_column\'];
$zeilen = $instance[\'wp_line\'];
for ($i = 1; $i <= $zeilen; $i++) {
echo "<label style=\'display: block; margin-top: 10px;\'>Zeile {$i}</label>";
for ($j = 1; $j <= $spalten; $j++) {
$instSpecLine = $instance["spec_line_{$i}_{$j}"];
echo "<input class=\'widefat\' type=\'text\' value=\'{$instSpecLine}\' name=\'{$instSpecLine}\' id=\'{$instSpecLine}\' placeholder=\'Spalte {$j}\' >";
}
$j = 0;
}
}
}
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance[\'wp_table_title\'] = $new_instance[\'wp_table_title\'];
$instance[\'wp_table_subtitle\'] = $new_instance[\'wp_table_subtitle\'];
$instance[\'wp_line\'] = $new_instance[\'wp_line\'];
$instance[\'wp_column\'] = $new_instance[\'wp_column\'];
$spalten = $instance[\'wp_column\'];
$zeilen = $instance[\'wp_line\'];
for ($i = 1; $i <= $zeilen; $i++) {
for ($j = 1; $j <= $spalten; $j++) {
$instSpecLine = "spec_line_{$i}_{$j}";
$instance[$instSpecLine] = $new_instance[$instSpecLine];
}
}
return $instance;
}
最合适的回答,由SO网友:AddWeb Solution Pvt Ltd 整理而成
请替换以下行:
echo "<input class=\'widefat\' type=\'text\' value=\'{$instSpecLine}\' name=\'{$instSpecLine}\' id=\'{$instSpecLine}\' placeholder=\'Spalte {$j}\' >";
代码如下:
echo "<input class=\'widefat\' type=\'text\' value=\'{$instSpecLine}\' name=\'".$this->get_field_name("spec_line_{$i}_{$j}")."\' id=\'{$instSpecLine}\' placeholder=\'Spalte {$j}\' >";
希望这对你有帮助