Tablica super globalna z wnętrza metody używana jest w konkretnym celu i ma to sens ( bynajmniej ja go widzę bo innego wyjścia nie znalazłem ) Jest to robione tylko w wypadku gdy chce mięć jakąś zmienna widzianą globalnie i tylko w paru specyficznych klasach tych zmiennych jest dosłownie kilka.
Jeśli chodzi o wyciszanie @ to też ma sens nie robię tego wszędzie tylko w paru konkretnych miejscach gdzie mogę np dostać argument w $_POST lub w $_GET nie wiem w którym więc je wyciszam bo jak dostane w poscie a sprawdzam zawsze i posta i geta do get mi rzuca błąd a to błąd nie jest
Dlaczego moje rozwiązania a nie cudze ? Mój własny system działa w taki sposób jak ja chce czyli np mam w klasie cRdzen metodę:
<?php
/**
* Metoda wykonująca zapytanie do bazy danych i zwracająca wynik tego zapytania.
* @param $tresc_zapytania string. Treść zapytania SQL
* @return $wynik
* @exception Exception
* @see #zapytanie_debug( $tresc_zapytania )
*/
protected function zapytanie( $tresc_zapytania )
{
$db = self::podaj_polaczenie() ;
@$wynik = pg_query( $db, $tresc_zapytania ) ;
if( ! $wynik ) throw
new Exception
( $GLOBALS[ 'napisy' ][ 8 ].'<br><br><i>'. $tresc_zapytania.'</i><br><br>'.pg_last_error( $db ).'<br>'.pg_result_error( $db, $wynik ), 4
) ;
return $wynik ;
}
?>
Teraz w klasie cModulProjekty dziedziczącej po cRdzen i implementującej iModul wykorzystuje tą metode:
Ale najpierw z obiektu javascript musze zrobić zapytanie tak:
<?php
var ajax = new Ajax.Request( 'index.php' ,
{
method: 'post',
parameters: {zapytanie: 'tak', zapytanie_jakie: 'podaj_zalaczniki_zadania', id : projekty.edytowany_projekt_id },
onComplete: projekty.zapisz_powiazane_zalaczniki_zadania,
encoding : 'UTF-8'
});
?>
Zapytanie jest obsługiwane przez system ( są sprawdzane uprawnienia )
<?php
/**
* Metoda podaje zalaczniki powiazane z zadaniem w formacie json
* param $_POST['id'] typu integer - id zadania
* param $_POST['index'] typu integer - index wierszu zadania zwracanu w pierwszym wierszu odpowiedzi
* return array[ object ] lub zwraca wyjątek
*/
public function podaj_zalaczniki_zadania_wiersze()
{
$zapytanie = "select zalaczniki_ogolne.id, zalaczniki_ogolne.plik_nazwa, zalaczniki_ogolne.plik_wielkosc , zalaczniki_ogolne.plik_typ FROM zalaczniki_ogolne where zalaczniki_ogolne.status = 'połączony' AND zalaczniki_ogolne.polaczenie_typ = 'zadanie' AND zalaczniki_ogolne.polaczenie_id=".$id ;
$wynik = self::zapytanie( $zapytanie ) ;
include_once( 'data/biblioteki_php/json.php' ) ;
$wiersz[ 'index' ] = $index ;
for( $i = 0 ; $i < $ile ; $i++ )
{
}
echo json
::encode( $jsonWynik ); }
?>
odpowiedz trafia do javoscriptowej metody:
<?php
/**
* Metoda zapisuje pobrane zalaczniki powiazane z zadaniem uzytkownikow i wyswietla odpowiedni komponent
*/
zapisz_powiazane_zalaczniki_zadania: function( originalRequest )
{
var odp = sprawdz_odpowiedz_ajaxa( originalRequest.responseText ) ;
var zalaczniki
= new Array( 0
) ; projekty.zalacznikiEdycja = new String( "" ) ;
if( odp == 'dobra' )
{
var wynik = originalRequest.responseText;
var wynik1
= wynik
.substr( 2
) ;
var json = wynik1.evalJSON();
for( var i = 0 ; i < json.length ; i++ )
{
zalaczniki
[ i
] = new Array( 0
) ; zalaczniki[ i ][ 0 ] = json[ i ].plik_nazwa;
zalaczniki[ i ][ 1 ] = json[ i ].plik_wielkosc;
zalaczniki[ i ][ 2 ] = json[ i ].id;
zalaczniki[ i ][ 3 ] = json[ i ].plik_typ;
projekty.zalacznikiEdycja += json[ i ].id+',' ;
}
}
projekty.uploadZadaniaEdycja.inicjalizuj_edycja( 'projekty', 'uploadZadaniaEdycja', 'edytuj_zadanie_zalaczniki', 'edytuj_zadanie_a', 680, 350, 70, zalaczniki ) ;
$( 'edytuj_zadanie_load' ).style.display = "none" ;
$( 'edytuj_zadanie_okno' ).style.display = "block" ;
},
?>
metoda sprawdź odpowiedź ajaxa spowoduje że w wypadku gdy jest status ok to nic się nie dzieje jak jest inaczej to poleciał wyjątek i mi go odrysuje na ekranie w okienku np ( wszystko asynchronicznie ) :

To jest trochę bardziej rozbudowane i ma kilka dodatkowych opcji, ale to akurat mało ważne sens w tym że działa tak jak ja chce i ja doskonale wiem jak działa mam nad tym pełną kontrole i jakiekolwiek modyfikacje robię od zaraz.
Jeżeli chodzi o komponenty to sprawa jest już banalna rozważałem tylko jedną bibliotekę w której zrobiłem sobie stronę domową a mianowicie Qooxdoo
strona w qooxdoo ale biblioteka jest za wolna jak się dowali kilka tabów i okienek naprawdę obciąża system przeglądarki wymiękają z bardziej rozbudowana aplikacją w qooxdoo nie ma sensu dopóki javascript nie będzie o wiele szybszy. Jest jeszcze jedna rzecz w qooxdoo która mi się niepodobana żadna przeglądarka klas nie wyświetli tych z qooxdoo bo oni mają swoją własna filozofie.
Takie komponenty jak zwykła lista , combo czy tabelka są marne. Marne dlatego bo mi w niczym nie pomogą ( powtarzam mi ) i tak muszę zrobić z jednej listy podwójna zrobić tak żeby mi się ajaxowo dane ładowały z bazy danych, zrobić wyszukiwanie i wiele innych rzeczy. Moja podwójna lista wygląda tak: ( pojedynczej nie używam )
lista.rysuj_okno_list( 'de_dane_elementy', 'Struktury elementu:', 'Wszystkie struktury : ' , 'rdzen_dodaj_element_elementy', 'typ elementu', 'element', 295, 330 ) ;

lista.rysuj_okno_list( 'de_uzytkownicy', 'Uprawnienia elementu:', 'Wszystkie uprawnienia ' , 'rdzen_dodaj_element_uzytkownicy', '', 'uprawnienie', 295, 330 ) ;

a tutaj upload progressbar
if( rdzen.uploadElementu == null ) rdzen.uploadElementu = new upload( 'okno_dodania_elementu_zalaczniki', 'element', 'zalaczniki_ogolne' ) ;
rdzen.uploadElementu.inicjalizuj( 'rdzen', 'uploadElementu', 'de_zalaczniki', 'dodaj_element_a', 640, 360, 50 ) ;

combobox z wyszukiwaniem kategoriami ajax ( automat ja robie jedna linijkę i takie mi są potrzebne komponentyi takie se robie )
combo.rysuj_okno_podelementow( 'dodaj_zadnie_rodzaj_podokno', 'Dział odpowiedzialny za fakture:', "dodaj_fakture_dzial", "", "dział", false )

a tutaj jeszcze tabelka i struktura z której korzystają moje komponenty można dodawać, edytować ponad 20 różnych typów elementów:

Jeden komponent robię jeden dzień rzadko kiedy więcej więc nakład pracy nie jest jakiś duży a efekt jest super. Najdłużej robiłem drzewo bo potrzeba wykorzystania rekurencji w javascript powodowała lawine bugów. Moje rozwiązania są najlepsze , ale tylko dla mnie nie ma tu jakiejś większej filiozofi chodzi tylko i wyłącznie o przyspieszenie mojej pracy i zwiększenie wydajności przy tworzeniu tego konkretnego systemu. Nie uważam się też za dobrego programistę raczej średniego więc finezji się tu nie doszukujcie.
Robię wszystko sam więc we wszystkim jakiś poziom muszę trzymać co za tym idzie w niczym nie jestem bardzo dobry. Jedyne co uważam że robię bardzo dobrze to znajduje rozwiązania. Mam bardzo dobre pomysły, ale jestem sam więc ich realizacja jest jaka jest

Pzdro