Adminer 3.2.0 – AJAX

Školení, která pořádám

Hlavní novinkou v právě vydané verzi Admineru je využití AJAXu. Kromě jednoduchého použití pro stažení pomalu načítaných dat (což je čistší dělat AJAXem než vloženým JavaScriptem) a načtení dlouhých textů do inline editace se AJAXem odesílají také všechny požadavky (kromě formulářů s přiloženými soubory), které nemění navigaci – to ovšem pouze v moderních prohlížečích s podporou history.pushState (Firefox 4 a Google Chrome). O detailech implementace mám v plánu napsat samostatný článek.

A jaký je vlastně smysl použití AJAXu v Admineru, není to jen technologická masturbace? Hlavním přínosem je rychlost – subjektivní dojem zrychlení je opravdu značný. Původně jsem chtěl s novou verzí Admineru počkat až na vydání Firefoxu 4, ale ten má proti původnímu plánu zpoždění.

Dalších změn v Admineru se totiž nakupilo také poměrně dost:

  1. Kromě možnosti přesunout tabulky do jiné databáze přibyla i možnost tabulky zkopírovat. Ta funguje i se stejnou databází, kdy tabulky dostanou prefix copy_.
  2. Ve výpisu tabulky lze nyní hledat i podle výrazu, tedy např. date > NOW(). Slouží k tomu prázdný operátor.
  3. Nově lze exportovat výsledek SQL dotazu.
  4. Při vkládání nového záznamu (nikoliv při editaci) se focus nastaví do prvního políčka.
  5. Schéma databáze ukládá rozmístění tabulek do cookie. Ta se nastavovala pro celé URL, s čímž byl v některých prohlížečích problém, proto se nově nastavuje jen pro cestu před otazníkem a název cookie obsahuje název databáze. Nově se také dá na aktuální rozložení schématu trvale odkázat pomocí URL.
  6. V režimu vykonávání SQL příkazu, při kterém se zobrazují pouze chyby, se nyní vypisuje celkový čas provedení všech příkazů.
  7. V historii SQL příkazů přibyl příkaz pro editaci všech příkazů najednou. To se hodí hlavně v případě, kdy si historii chcete uložit do souboru.
  8. V MS SQL se nyní lépe vytváří primární a cizí klíče.
  9. Ve výpisu ze SQLite se zobrazuje 0.
  10. Výchozí typ při vytváření tabulky byl změněn na int.
  11. Při vytváření tabulky a editaci hodnot se na horní a spodní políčko dá přesunout pomocí Ctrl+nahoru a Ctrl+dolů.
  12. Při přihlašování k SQLite uživatelé nevěděli, co mají vyplnit jako server, login a heslo, nově se proto tato pole skrývají (stačí totiž vyplnit cestu k databázi).
  13. V databázi PostgreSQL dokáže Adminer nově využít sloupce oid. Ty jsou sice pomalu na ústupu, ale někdo je stále používá místo primárních klíčů.
  14. V přizpůsobení lze určit, co se má zobrazovat na titulní stránce.
  15. V Editoru se při hledání čárkami oddělených hodnot hledá u číselných sloupců pomocí operátoru IN.
  16. V Editoru se pro políčka md5 a sha1 používá <input type="password">.
  17. Adminer vždy dokázal pracovat i bez cookies (pokud to bylo v konfiguraci PHP povoleno), ve verzi 3.1.0 to ale bohužel bylo porouchané. V nové verzi lze tedy opět pracovat i při vypnutém session.use_cookies (ne, že bych to někomu doporučoval).
  18. Přibyl portugalský, slovinský a turecký překlad.
Jakub Vrána, Adminer, 25.2.2011, diskuse: 33 (nové: 0)

Diskuse

Eda:

Díky za novinky. Parádička, jen tak dál. Jediné 2 věci, co Admineru z mého pohledu chyběly k dokonalosti, byly přidány. Kam se hrabe phpMyAdmin :-)

asdf:

Ďakujem, skvelá práca ako vždy!

ikona Filip Procházka:

Díky Jakube! Moc dobrá práce, teď už mi tam vůbec nic nechybí:) Přeju Admineru spoustu spokojených uživatelů a budu pokračovat v rozšiřování mezi známé;)

marek:

Vynikajúce, ale mne chýba ešte jedna maličkosť: listbox s hodnotami (s možnosťou označiť viac možností) pri filtrovaní stĺpcov s typom "enum" alebo "set".

ikona Jakub Vrána OpenID:

Takhle to funguje v Adminer Editoru, kde mi to dává lepší smysl. Šel by z toho udělat i plugin, ale dělat se mi to nechce.

marek:

Nerozumiem prečo to v plnom Adminere nedáva zmysel. Je to nejako obmedzujúce?

Ja mám db s vyše 100 tabuľkami a nedokážem si pamätať všetky hodnoty enum alebo set pre všetky položky zo všetkých tabuliek. A už vôbec si nepamätám ich číselné hodnoty, aby som podľa nich mohol filtrovať. Vždy si musím otvoriť druhý tab so štruktúrou tabuľky a ručne opisovať názov hodnoty, ak chcem podľa nejakej filtrovať. Vy to robíte ako, ak sa môžem opýtať?

ikona Jakub Vrána OpenID:

V Admineru to taky může dávat smysl, v Adminer Editoru ale lepší.

Já pro práci s daty používám Adminer minimálně, na to skoro vždy používám Adminer Editor.

Ale jak říkám – zkuste vytvořit plugin, já ho pak milerád zveřejním.

mp:

Skoda ze je to tak rozdelene, nechce sa mi velmi prepinat medzi dvoma nastrojmi, ked skoro vzdy potrebujem i pracu s datmi i strukturou

Pavel Železný:

Ještě by bylo moc pěkné, kdyby adminer uměl dělat SQL hinting jako je třeba v PlSQL Developeru. Tedy že když píši SQL dotaz a chvilku čekám, pokusí se mi systém doplnit název tabulky nebo sloupečku. Případně to dělá na vyžádání při stisknutí klávesy F6.

ikona Jakub Vrána OpenID:

To je v dlouhodobém plánu, využít by se k tomu dalo http://blog.quplo.com/2010/06/css-code-com…-your-browser/. Pokud by se našli nějací dobrovolníci, kteří by to chtěli implementovat, tak budu rád.

MatJ:

Dakujeme za aktualizaciu. Cim dalej tym silnejsi je tento nastroj :) Niekde si uz spominal, ze zatial neplanujes robit kopirovanie databaz v admineri, ze to treba riesit import/exportom, predsa len by som zahlasoval za takuto funkciu. A taktiez by bolo mozno dobre, mat tam moznost pozriet sa, ktori uzivatelia maju pristup ku danej databaze. Inac super, velmi dobre sa s tym pracuje.

ikona Jakub Vrána OpenID:

V nové verzi přibylo alespoň kopírování tabulek. Práci s uživateli se vylepšovat nechystám.

Tomáš Pavlacký:

adminer je super

Ot@s:

Velmi uzitečná utlitka. Díky. Mě osobně chybí jedinné - volba portu v přihlašovacím formuláři.

ikona Jakub Vrána OpenID:

Port se zadává pomocí dvojtečky v názvu serveru, je to docela běžná konvence, např. tedy localhost:3306

Martin Hujer:

//Adminer je super, pořád překvapuje - dnes to bylo automatické předvyplnění cizích klíčů během vytváření tabulky :)

Ad. URL na konkrétní schéma - nejsem si jistý, jestli není chybka, že na něj odkazuje jen znak '#' (ale nechci to reportovat jako bug, pokud to je záměr)

ikona Jakub Vrána OpenID:

Co by to mělo být?

Martin Hujer:

Čekal bych něco jako "Trvalý odkaz na rozložení" nebo jen "Trvalý odkaz" - kdybych z changelogu nevěděl, že to tam je jako novinka, tak by mě na ten # ani nenapadlo klikat

ikona Jakub Vrána OpenID:

Vyměnil jsem to v Gitu.

Shamania:

Super nástroj, ale chybí mi u exportu SELECTu možnost "otevřít-INSERT" vedle možností CSV,/CSV;/TSV.
Takhle pak následný import musím dělat přes soubor místo ctrl+c/ctrl+v.

ikona Jakub Vrána OpenID:

Tato možnost existuje.

Shamania:

Omlouvám se a nechápu, teď už tam vidím na prvním místě i SQL vedle těch třech zmíněných.

ikona Filip Procházka:

Nedaří se mi přihlásit na zdroják a nechce se mi to teď řešit, tak se snad nebudeš zlobit, když ti to napíšu sem :)

Feature request: napadlo tě už přidání podpory, pro snažší přejmenování sloupce? :) Takhle musím smazat FK, index a pak teprve můžu přejmenovat sloupec a nastavit mu FK znovu. Bylo by to super :)

ikona Jakub Vrána OpenID:

Také už mě to napadlo, ale přijde mi to příliš magické, takže to dělat nebudu. Mazat index by nemělo být potřeba, stačí cizí klíč.

David Hynek:

Zdravím. Nechci být rypákem nad tak dobrým dílkem jako je adminer, ale přec drobnost bych měl. Mám verzi 3.2.0 MySql CZ
a html není ukončené. Chybí tam </body></html>

ikona Jakub Vrána OpenID:

Ono jich tam záměrně chybí víc. Prakticky všechny, které jsou nepovinné (např. taky <head>) a jejichž absence nerozbije prohlížeče. Viz http://www.w3.org/TR/html401/index/elements.html. Klidně si to prožeň validátorem.

David Hynek:

Aha, a důvod? Nějaká finta na roboty vyhledávače?
Profík jako ty nedělá nic co by nemělo nějaký účel :o)

ikona Jakub Vrána OpenID:

Důvod je ten, že ty značky jsou nepovinné, takže je zbytečné je uvádět. Zmenšuje to velikost (tedy i zvyšuje rychlost), navíc to dovoluje dělat různé triky (např. neuvedení </body></html> znamená, že můžu zavolat page_footer() a pak třeba ještě vložit nějaký kód, který má být až za patičkou).

Vyki:

Také velmi děkuji za nový adminer, skvěle a rychle se s tím pracuje. Jsem velmi překvapen, že history.pushState nezvládá IE9. To snad dělají programátorům schválně. Jinak ve FF4 to běhá v pohodě, ale v chrome to běhá tak rychle, že se ani nestihne zobrazit kolečko načítání. Testoval jsem tuto funkčnost i na Githubu a výsledek stejný. FF4 je oproti Chrome v tomto ohledu líný.

Marty:

Připojuji se k pochvalám!

Mohl bych se zeptat, proč je v Adminerovi míchána prezentace s logikou aplikace?

ikona Jakub Vrána OpenID:

Projekt jsem stavěl jako co nejkompaktnější a nechtěl jsem ho zatěžovat šablonovacím systémem a složitější logikou, která by s tím nutně byla spojená.

Další věc je ta, že Adminer někdy provádí dlouhotrvající operace, během kterých je potřeba odsypávat výstup, takže klasický postup (naplnit proměnné, zpracovat šablonu) by selhal. Musely by se tedy použít aktivní šablony (jak jsem to kdysi nazval, viz http://php.vrana.cz/vyhody-aktivnich-sablon.php), což by samozřejmě šlo, ale komplexita by se ještě o něco zvýšila.

Takže zatímco u běžných webových aplikací si výhod šablon naplno užívám, u Admineru svého rozhodnutí nelituji. Kromě výše zmíněných praktických výhod se mi totiž dobře pracuje i s kódem.

Marty:

Diky za odpoved!

František Svoboda:

Je možné nějak vypnout používání AJAXU? Musím říct, že mi asynchronní načítání dělá značné potíže - například když dám zpět, místo zobrazení stránky se stránka načte znovu, což třeba při editaci nové tabulky znamená ztracení práce.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.