使用for循环的微件更新问题

时间:2016-12-28 作者:F16R

我尝试开发一个小部件,它支持创建表的功能。用户可以确定需要多少列和行,这一点很重要。我已经在后端生成了用户特定数量的输入字段。我的问题是无法保存输入字段中的内容。为此,我在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;
}

1 个回复
最合适的回答,由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}\' >";
希望这对你有帮助