PDA

Zobacz pełną wersję : Własny komponent - odswiezanie|przeladowanie strony



elkosci
25-02-2009, 23:34
Uwaga ! ---- Problem rozwiązany ---- !
Witam,

Jestem nowy na forum - przeszukalem je wyszukiwarka i niestety nie udalo mi sie znalezc niczego co by mi pomoglo.
Oto moj problem:
Tworze wlasny komponent w joomli - jestem na etapie skryptu w ramach paneli administracyjnego. Udalo mi sie stworzyc kawalek kodu ktory pobiera dane z bazy i je wyswietla( kod za chwile). Chcialbym aby po kliknieciu przycisku usun nastepowalo usuwanie (udalo sie to juz zrobic) rekordu oraz jednoczesne odswiezenie strony na ktorej nastapilo klikniecie.
Aby jednoczesnie pojawiala sie uaktualniona lista(w tej chwili odswiezenie jest skuteczne albo przez klawisz F5 lub tez gdy zastosuje osobny przycisk <button onClick="location.reload();"> Odswiez</button> )
- i klopot polega na tym ze nie dziala zlączenie obu funkcji jak w kodzie ponizej - usuwa poprawnie, nie odswieza(a moze i odswieza bo strona mignie ale lista sie nie uaktualnia)



JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'com ponents'.DS.'com_rejestracja'.DS.'tables');
$table =& JTable::getInstance('rejestracja', 'Table');

$query = 'Select id FROM '.$table->getTableName();
$db =& JFactory::getDBO();
$db->setQuery($query);
$id=$db->loadObjectList();
function usun($nr,$id,$table)
{
$table->delete($id[$nr]->id);
}

if(!count($id)) echo 'Nie ma chętnych';
else
{

echo '<table style="font-size: 5px; text-align: center;">
<tr>
<td colspan="2" class="poleLeft">Dane podstawowe</td>
<td colspan="2" class="poleLeft">Adres</td>
<td colspan="2" class="poleLeft">Kontakt</td>
<td colspan="2" class="poleCenter">Dokument</td>
<td colspan="2" class="poleCenter">Kategoria<br/>kursu</td>
<td colspan="2" class="poleCenter">Dodatkowe</td>
<td colspan="2" width="60px" height="10px" style="vertical-align: top;">Operacje</td>
</tr>';

for ($i=0;$i<count($id);$i++){
$table->load($id[$i]->id);
echo JText::_(
'<tr>'
//tutaj pola z formularza - wszystko poprawnie smiga
.'<td class="poleCenter">'
.'<button onClick="edytuj(id)">Edytuj</button>'
.'</td>'
.'<td class="poleCenter">'
.'<form name="formik" method="POST" action="index.php?option=com_rejestracja&view=lista" >'
.'<input type="hidden" name="id" value="'.$id[$i]->id.'">'
.'<input type="hidden" name="usun_sent" value="1" >'
.'<button type="submit" onClick="location.reload();">Usuń</button>'
.'</form>'
.'</td>'

.'</tr>'
);

}
echo '</table>';

/echo JRequest::getVar('id', '', 'post', 'string', JREQUEST_ALLOWRAW );
if(JRequest::getVar('usun_sent', '', 'post', 'string', JREQUEST_ALLOWRAW ))
$table->delete(JRequest::getVar('id', '', 'post', 'string', JREQUEST_ALLOWRAW ));
//echo JText::_('<a href="index.php?option=com_rejestracja&view=lista">Powrot</a>');

}

echo (''
.'<form method="POST" action="index.php?option=com_rejestracja">'
.'<button type="submit">Powrot</button>'
.'</form>'
.'<button onClick="window.location.reload();">Odśwież</button>'

.'');


onClick="window.location.href=window.location.href" - to tez nie smiga...

-----------------------------------------------------------------------------------------------------------------
Rozwiązanie(byc moze nieprofesjonalne acz skuteczne):

Zastosowalem przy rozwiazaniu tego nastepujacej konstrukcji: <meta http-equiv="refresh" content="0">
Umiescilem to zaraz po usunieciu posta, o tak:


//....
//kod niezmieniony dotad

if( JRequest::getVar('usun_sent', '', 'post', 'string', JREQUEST_ALLOWRAW ) )
if( $table->delete(JRequest::getVar('id', '', 'post', 'string', JREQUEST_ALLOWRAW )) ) //tutaj nastepuje zmiana
echo JText::_('<meta http-equiv="refresh" content="0">');

//dalej bez zmian


Rozwiazanie przedstawione powyzej jest skuteczne aczkolwiek zostało okreslone mianem protezy.

Zamiast niego zostalo mi zaproponowane nastepujace rozwiazanie:



//kod niezmieniony dotad

if( JRequest::getVar('usun_sent', '', 'post', 'string', JREQUEST_ALLOWRAW ) )
if( $table->delete(JRequest::getVar('id', '', 'post', 'string', JREQUEST_ALLOWRAW )) ) //tutaj nastepuje zmiana
header("Location: adresstrony.php");

//dalej bez zmian


Pozdrawiam,
Lukasz