Open source webový aplikační framework Django slaví 20. narozeniny.
V Brestu dnes začala konference vývojářů a uživatelů linuxové distribuce Debian DebConf25. Na programu je řada zajímavých přednášek. Sledovat je lze online.
Před 30 lety, tj. 14. července 1995, se začala používat přípona .mp3 pro soubory s hudbou komprimovanou pomocí MPEG-2 Audio Layer 3.
Výroba 8bitových domácích počítačů Commodore 64 byla ukončena v dubnu 1994. Po více než 30 letech byl představen nový oficiální Commodore 64 Ultimate (YouTube). S deskou postavenou na FPGA. Ve 3 edicích v ceně od 299 dolarů a plánovaným dodáním v říjnu a listopadu letošního roku.
Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila open source robota Reachy Mini (YouTube). Předobjednat lze lite verzi za 299 dolarů a wireless verzi s Raspberry Pi 5 za 449 dolarů.
Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.
McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.
Byla vydána (𝕏) červnová aktualizace aneb nová verze 1.102 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.102 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Byla vydána nová verze 2.4.64 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 8 bezpečnostních chyb.
Společnost xAI na síti 𝕏 představila Grok 4, tj. novou verzi svého AI LLM modelu Grok.
soubor inc.php $cont = false; $cont .= 'Nějaký text'; $cont .= 'Nějaký jiný text'; soubor class.php class sel{ public function __construct(){ include_once(ABSPATH.'/inc.php'); } } soubor index.php include_once(ABSPATH.'/class.php'); $cont = new sel(); echo $cont;
__toString()
, ale jeví se mi to jako cesta do pekel.
function __toString() { include_once(ABSPATH.'/inc.php'); return $cont; }Fungovat by to mělo, ale je to celé hrozně nepřehledné. Opravdu to nemůžeš napsat pořádně?
Opravdu to nemůžeš napsat pořádně?Díky, určitě můžu, a poradíš jak to myslíš?
//soubor inc.php class inc{ protected $cont; public function __construct(){ $this->cont = false; $this->cont .= 'Nějaký text'; $this->cont .= 'Nějaký jiný text'; } }
//soubor sel.php class sel extends inc{ public function __toString(){ return $this->cont; } }
//soubor index.php function __autoload($class){ include(ABSPATH.'/'.$class.'.php'); } $cont = new sel(); echo $cont;
Jakých souborů je spousta?Souborů inc.php, akorát mají jinou cestu..
/novinky/inc.php /home/inc.php /kontakty/inc.php
Nemůžeš sem napsat, o co konkrétně se snažíš?Snažím se pomocí class zobrazit obsah souboru dle zadané url. Pokud nekdo zadá url
/novinky/tak se načte obsah souboru /novinky/inc.php
/kontakty/tak se načte obsah souboru /kontakty/inc.php. atd.. Díky
//soubor $modul/inc.php $this->cont = false; $this->cont .= 'Nějaký text'; $this->cont .= 'Nějaký jiný text';
//soubor sel.php class sel{ private $cont; public function __construct($modul) { include(ABSPATH.'/'.$modul.'/inc.php'); } public function __toString(){ return $this->cont; } }
//soubor index.php function __autoload($class){ include(ABSPATH.'/'.$class.'.php'); } $cont = new sel($modul); echo $cont;
// Společný soubor všem částem webu class Page { // ... cokoliv používáš všude protected $title = '(undefined)'; protected $config = array(); // tady máš nějaké volby public function getTitle() { return $this->title; } public function setPageConfig() { return $this->title; } // tato metoda by mohla byt abstract public function getContent() { // obecna stranka proste jen zobrazi index.html readfile($this->config['base_dir'].'index.html'); } }
// novinky/main.php class Novinky extends Page { protected $title = "Novinky"; // getter je zděděn public function createContent() { // nacteni novinek $q = dibi::select('news.*, ...'); if (isset($this->config['lang'])) { // pokud bylo zadano '/news/...' $q->where('news.Lang = %s', $this->config['lang']); } if (isset($this->config['path'][0])) { // pokud je url ve tvaru '/*/id' $q->where('news.id = %s', $this->config['path'][0]); } // ... cokoliv potřebuješ } }O samotné zpracování těchto tříd se pak postará index.php, na který na serveru nasměruješ úplně všecko.
// index.php $path = explode('/', trim($_SERVER['REQUEST_URI'], '/')); $page = isset($path[0]) ? $path[0] : '/'; // ošetření prázdné cesty (/) $page_map = array( '/' => array('class' => 'Page', 'base_dir' => './home/'), 'kontakty' => array('class' => 'Kontakty'), 'novinky' => array('class' => 'Novinky'), 'news' => array('class' => 'Novinky', 'lang' => 'en'), ); $page_config = $page_map[$page]; $page_config['path'] = array_slice($path, 1); $class_name = $page_config['class']; function __autoload($c) { include('class/'.strtolower($c).'.class.php'); // dle tveho umisteni souboru s tridama } if (class_exists($class_name)) { $p = new $class_name(); $p->setConfig($page_config); $p->createContent(); } else { header("Status: 404 Not Found"); echo 'Sorry, page not found!'; }Ve výsledku to dopadne tak, že pokud uživatel vleze na adresu http://example.com/, tak se mu zobrazí soubor ./home/index.html a pokud na http://example.com/novinky/1, tak se mu zobrazí novinka s ID 1. Prostým přidáváním tříd a záznamů do pole $page_map si můžeš aplikaci dle libosti rozšiřovat a přitom se z toho nezblázníš. A až tě to přestane bavit, tak sáhni po nějakém pěkném frameworku.
Tiskni
Sdílej: