PDA

Zobacz pełną wersję : Problem z powrotem do strony



cineq
03-09-2012, 18:15
Witam. Szybko opisze swój problem. Otwórz stworzyłem sobie komponent, którego zadaniem jest dodanie wpisu do bazy danych oraz jego edycja i usunięcie. Robię to w następujący sposób:
Oto model:


<?phpdefined('_JEXEC') or die;jimport('joomla.application.component.model'); jimport('joomla.database.database');jimport('jooml a.database.table');JTable::addIncludePath(JPATH_CO MPONENT . DS . 'tables');
class ZamowieniaModelDostawa_typ extends JModel { public function getCategory($szukana,$tabela) { $db = &JFactory::getDbo(); $query = 'SELECT ' .$szukana. ' FROM '. $db->getPrefix().$tabela; $db->setQuery($query); return $db->loadRowList(); } public function zapis_dane() { global $mainframe; $row = & JTable::getInstance('dostawa_typ', 'table'); $row->nazwa = JRequest::getVar('nazwa', '', 'post', 'string', JREQUEST_ALLOWRAW); $mainframe = JFactory::getApplication(); $mainframe->redirect('?&view=dostawa_typ', JText::_('Zmieniono')); } public function show_name($id) { $db = &JFactory::getDbo(); $query = 'SELECT nazwa FROM #__zamowienia_dostawa_typ WHERE id_dostawa = '.$id; $db->setQuery($query); return $db->loadAssocList(); } public function delete_item($id) { $db = &JFactory::getDbo(); $query = 'DELETE FROM #__zamowienia_dostawa_typ WHERE id_dostawa = '.$id; $db->setQuery($query); $db->query(); }}?>

Następnie mam stworzone 2 widoki. 1 defaultowy kótry wyświetla zawartość tabelki, 2 -> do edycji wartości pola.


<?phpdefined('_JEXEC') or die('Restricted access');$pathToMyXMLFile = JPATH_COMPONENT . DS . 'forms' . DS . 'addcity.xml';$form = & JForm::getInstance('addcity', $pathToMyXMLFile);$doc =& JFactory::getDocument();//$doc->addScript(JURI::root(true)."/components/com_zamowienia/media/js/jquery.dataTables.js");//$doc->addScript(JURI::root(true)."/components/com_zamowienia/media/js/jquery.dataTables.min.js");//$doc->addScript(JURI::root(true)."/components/com_zamowienia/media/js/jquery.js");*/$doc->addStyleSheet(JURI::root(true)."/components/com_zamowienia/css/style.css");//include(JURI::root(true)."/components/com_zamowienia/media/menu.html");
?>
<div class="blank<?php echo $this->pageclass_sfx; ?>"> <?php if ($this->params->get('show_page_heading', 1)) : ?> <h1> <?php if ($this->escape($this->params->get('page_heading'))) : ?> <?php echo $this->escape($this->params->get('page_heading')); ?> <?php else : ?> <?php echo $this->escape($this->params->get('page_title')); ?> <?php endif; ?> </h1> <?php endif; ?> <div id="right"><a href="index.php?option=com_zamowienia&view=dostawa_typ&layout=edit" class="button">Dodaj nowy</a></div> <div id="addcity"> <table id="dostawy_typ"> <thead> <tr> <th>ID</th> <th>Nazwa</th> <th>Edytuj</th> <th>Usuń</th> </tr> </thred> <tbody> <form enctype="multipart/form-data" action="" method="post" name="addcity"> <?php foreach ($this->getCategory as $row) { echo '<tr><td>"' . $row[0] . '"</td> <td>' . $row[1] . '</td> <td>'.JHTML::_('link', 'index.php?option=com_zamowienia&view=dostawa_typ&layout=edit&id='.$row[0], 'Edytuj').'</td> <td>'.JHTML::_('link', 'index.php?option=com_zamowienia&view=dostawa_typ&id_del='.$row[0], 'Usuń').'</td></tr>'; } ?> </form> </tbody> </table> </form> </div></div>
Edit


<?phpdefined('_JEXEC') or die('Restricted access');$pathToMyXMLFile = JPATH_COMPONENT . DS . 'forms' . DS . 'addcity.xml';$form = & JForm::getInstance('addcity', $pathToMyXMLFile);/*$doc =& JFactory::getDocument();$doc->addScript(JURI::root(true)."/components/com_zamowienia/media/js/jquery.dataTables.js");$doc->addScript(JURI::root(true)."/components/com_zamowienia/media/js/jquery.dataTables.min.js");$doc->addScript(JURI::root(true)."/components/com_zamowienia/media/js/jquery.js");*/
$tabela = $this->get('show_name');?>
<div id="addcity"><h1>Nazwa</h1> <form enctype="multipart/form-data" action="" method="get" name="addcity">
<?php echo $form->getLabel('nazwa', ''); ?> <?php echo $form->getInput('nazwa', ''); ?> <input class="add" type=submit value="Zapisz"> <input type="hidden" name="task" value="save" /> </form> </div>
Oraz view.html.php


<?phpdefined('_JEXEC') or die;
jimport('joomla.application.component.view');
class ZamowieniaViewDostawa_typ extends JView{ function display($tpl = null) { /* Pobieranie tytu�u strony, s��w kluczowych, parametr�w, opis�w... itp. */ /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%START%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% */ $app = JFactory::getApplication(); $params = $app->getParams(); $menus = $app->getMenu(); $menu = $menus->getActive();
if (is_object($menu)) { $menu_params = new JRegistry; $menu_params->loadJSON($menu->params); if (!$menu_params->get('page_title')) { $params->set('page_title', JText::_('Typy dostawy')); } } else { $params->set('page_title', JText::_('Typy dostawy')); }
$title = $params->get('page_title'); if ($app->getCfg('sitename_pagetitles', 0)) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); } $this->document->setTitle($title);
if ($params->get('menu-meta_description')) { $this->document->setDescription($params->get('menu-meta_description')); }
if ($params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $params->get('menu-meta_keywords')); }
if ($params->get('robots')) { $this->document->setMetadata('robots', $params->get('robots')); }
$this->assignRef('params', $params);
/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%KONIEC%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% */ $task = JRequest::getCmd('task'); $model = $this->getModel('dostawa_typ'); if(JRequest::getVar('task')) { $zapis = $model->zapis_dane(); $this->assignRef('zapis', $zapis); } $getCategory = $model->getCategory('*','zamowienia_dostawa_typ'); $this->assignRef('getCategory', $getCategory); $id = JRequest::getVar('id','','get','int'); if($id != null) { $t = $model->show_name($id); $name = $t[0]['nazwa']; }else { } $this->assignRef('show_name', $name); $del = JRequest::getVar('id_del','get','int'); if($del != null) { $del_tmp = $model->delete_item($del); } parent::display($tpl); } }?>

Problem jest taki, że dane z tabeli pobierane są dobrze, gdy klikę na edycję któregoś z wpisów czy też na dodanie nowego to pojawia się widok na dodanie/edycję, jednak przy kliknięciu na submita nie wraca mi poprawnie do widoku poprzedniego oraz nie zmienia/dodaje wpisu do bazy.

deviapps
04-09-2012, 01:32
Zrób do tego controller z taskiem save, bo miesza Ci się MVC.
Pod 2.5?
Najprościej jest spojrzeć jak to jest zrobione w core komponentach, do wyświetlania listy tworzysz zestaw model (dziedziczący po JModelList)+view, do edycji: controller (po JControllerForm)+model (po JModelAdmin) +view
Trochę kod Ci się kiepsko wkleił i trudno to odczytać.