Hallo zusammen.
Ich bin derzeit beim Erstellen einer eigenen Joomla!-Komponente. Die Komponente teste ich unter Joomla! 3.4.8. Bisher widme ich mich ausschließlich den Backend-Views.
Das Problem betrifft im Wesentlichen 3 Datenbank-Tabellen, die, wie im abgebildeten Datenbank-Modell dargestellt, vorhanden sind.
Zurzeit gibt es in der Komponente eine Members-View, die eine Liste aller erstellten Mitglieder anzeigt. Entsprechend hierzu die Member-View, die das Formular zum Anlegen eines Mitglieds anzeigt.
Des Weiteren gibt es eine Tests-View, die eine Liste aller angelegten Prüfungen, sowie eine Test-View, die das Formular zum Anlegen anzeigen.
Nun möchte ich Folgendes erreichen:
Es soll möglich sein, in der Member-View einen Tab auszuwählen, um alle bisherigen Prüfungen des jeweiligen Mitglieds anzuzeigen.
Dazu habe ich mich ganz generell an der com_contact Komponente orientiert.
Die Darstellung der Tabelle des Tabs habe in die Datei edit_tests.php ausgelagert und in edit.php eingebunden. Die Daten werden durch eine Methode im [com_name]Helper von der Datenbank abgerufen, die mit der getItem($pk) Methode im Member-Model aufgerufen wird.
Es wird die Tabelle auch mit den entsprechenden Einträgen angezeigt. Das Problem dabei ist nur, dass ich keine neuen Mitglieder mehr speichern kann. Das Member-edit Formular wird ganz normal angezeigt, ich kann auch die Felder ausfüllen, sobald ich jedoch auf Save bzw. Save & Close drücke, wird die Members-View (Liste) angezeigt ohne, dass das neue Mitglied gespeichert worden ist.
Wenn ich die entsprechende Passage (siehe unten) aus der edit.php wieder lösche, funktioniert alles wie davor (nur die Tabelle mit den abgelegten Prüfungen wird dementsprechend nicht mehr angezeigt).
Ganz generell habe ich nun 2 Fragen:
- Ist mein Vorgehen mit dem Laden der Daten via [com_name]Helper und anschließend über getItem im Member-Model korrekt? Gibt es bessere Wege?
- Woran könnte es liegen, dass ich nach dem Einbinden keine Mitglieder mehr einfügen kann?
Vielen Dank für Eure Hilfe!
Bisher sehen die Dateien wie folgt aus (Auszüge):
[com_name]/admin/views/member/tmpl/edit.php
Spoiler anzeigen
admin/views/member/tmpl/edit_tests.php
Spoiler anzeigen
...<div id="j-main-container"> <div class="clearfix"> </div><?php if (empty($this->item->tests)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div><?php else : ?> <table class="table table-striped" id="testList"> <thead> <tr>... </tr> </thead> <tbody> <?php $n = count($this->item->tests); foreach ($this->item->tests as $t => $test) : ?> <tr class="row<?php echo $t % 2; ?>" sortable-group-id="<?php echo $test->id?>"> ... </tr> <?php endforeach; ?> </tbody> <tfoot> <tr> <td colspan="10">... </td> </tr> </tfoot> </table><?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?></div>
[com_name]/admin/models/member.php
Spoiler anzeigen
[com_name]/admin/helpers/[com_name].php
Spoiler anzeigen
...
public function getItemTests($contentType, $id, $getTestData = true)
{
// Initialize some variables.
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName('m1.passed', 'member_passed'))
->from($db->quoteName('#__[com_name]_member_test_map', 'm1'))
->where(
array(
$db->quoteName('m1.member_id') . ' = ' . (int) $id,
$db->quoteName('t.published') . ' = 1'
)
);
$user = JFactory::getUser();
$groups = implode(',', $user->getAuthorisedViewLevels());
// $query->where('t.access IN (' . $groups . ')');
if ($getTestData)
{
$query->select(
array(
$db->quoteName('t.id'),
$db->quoteName('t.date', 'test_date'),
...
)
);
}
$query->join('INNER', $db->quoteName('#__[com_name]_test', 't') . ' ON ' . $db->quoteName('m1.test_id') . ' = ' . $db->quoteName('t.id'));
$db->setQuery($query);
$this->itemTests = $db->loadObjectList();
return $this->itemTests;
}
...
Alles anzeigen