it-swarm.com.de

Datensatz bearbeiten speichert einen neuen Datensatz mit aktualisierten Feldern

Ich schreibe eine kleine Joomla-Komponente für meine Schule, aber es gibt ein kleines Problem damit.

Wenn ich einen Datensatz bearbeite und dann speichere, wird dieser Datensatz nicht aktualisiert, sondern als neuer Datensatz mit aktualisiertem Feld gespeichert.

Ich habe die Schaltfläche in der Ansicht auf Fehler überprüft, kann jedoch keine Probleme erkennen.

Kann mir bitte jemand einige häufige Fehler mitteilen, die dieses Problem verursachen könnten?

Controller

class StudentControllerStudent extends JControllerForm
{
    public function __construct($config = array()) {
        parent::__construct($config);
    }
}

Modell

class StudentModelStudent extends JModelAdmin
{
    public function getTable($type = 'Student', $prefix = 'StudentTable', $config = array())
    {
        return JTable::getInstance($type, $prefix, $config);
    }

        public function getForm($data = array(), $loadData = true) {
            $form = $this->loadForm('com_student.student', 'student',array('control' => 'jform', 'load_data' => $loadData));

            if (empty($form))
            {
                return false;
            }
            return $form;
        }

        protected function loadFormData() {
            return $this->getItem();
        }

}

view.html.php

class StudentViewStudent extends JViewLegacy {

    protected $state;
    protected $item;
    protected $form;

    /**
     * Display the view
     */
    public function display($tpl = null) {
        $this->state = $this->get('State');
        $this->item = $this->get('Item');
        $this->form = $this->get('Form');

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new Exception(implode("\n", $errors));
        }

        $this->addToolbar();
        parent::display($tpl);
    }


    protected function addToolbar() {
            JFactory::getApplication()->input->set('hidemainmenu', true);
            JToolbarHelper::title('edit item');
            JToolbarHelper::save('student.save');
            if (empty($this->item->id))
            {
                JToolbarHelper::cancel('student.cancel');
            }
            else
            {
                JToolbarHelper::cancel('student.cancel', 'JTOOLBAR_CLOSE');
            }
    }

}
3

In der Ansicht Ihrer Komponente. components -> com_mycom -> view -> tmpl -> default.php ( oder edit.php, some.php) je nach Ihren Bedürfnissen.

<form action="<?php echo JRoute::_( 'index.php?option=com_student&view=student&layout=ifnotdefault&id='.$this->item->id ); ?>" method="post" class="form-validate" id="adminForm" enctype="multipart/form-data">

    <?php echo $this->form->renderField('id'); ?> // !important
    <?php echo $this->form->renderField('somefield'); ?>

    <input type="hidden" name="task" value="student.save" /> // !important
        <input type="submit" value="Save" />
        <?php echo JHtml::_( 'form.token' ); ?>

</form>

Check 'Formular Aktion', Check 'Feld ID', Check 'Aufgabe'

1
MaXX

Versuchen Sie dies Funktion loadFormData () für Ihr Modell:

protected function loadFormData()
{
    $data = JFactory::getApplication()->getUserState('com_student.edit.student.data', array());

    if (empty($data))
    {
        $data = $this->getItem();
    }

    return $data;
}
1
stckvrw

Bitte versuchen Sie folgendes:

1) Sie müssen die JTable-Klasse erstellen und folgenden Code hinzufügen:

function __construct(&$db)
{
     parent::__construct('#__yourtablename', 'id', $db);
     // Assumes "id" should be primary key of your table.
}

2) Checken Sie die DB ein und stellen Sie sicher, dass Sie den Primärschlüssel auf "#__yourtablename" gesetzt haben. Außerdem muss es auf AUTO_INCREMENT gesetzt werden, wenn nicht, dann versuche folgende Abfragen in deinem MySQL:

ALTER TABLE `#__yourtablename` ADD PRIMARY KEY(`id`);
ALTER TABLE `#__yourtablename` CHANGE `id` `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT;

Wieder oben wird davon ausgegangen, dass Sie id Spalte in Ihrer Tabelle haben.

Hinweis: Ersetzen Sie "#__" durch Ihr Tabellenpräfix.

1
Sahil Purav