Dodawanie obiektu SimpleXmlElement jako dziecka do innego obiektu SimpleXmlElement
Podczas budowania struktury XML z wykorzystaniem SimpleXmlElement dla jachcenawakacje.pl natknąłem się na problem dodawania do obiektu typu SimpleXmlElement jako dziecka innego obiektu SimpleXmlElement – wyciętego z innej struktury XML. Problem jest o tyle dziwny, że metoda SimpleXmlElement::addChild() przyjmuje jako wartość tylko i wyłącznie łańcuch znaków. W związku z dość sporą ilością kodu, jaki trzeba by napisać, aby przenieść jedną strukturę XML do innej takie rozwiązanie nie wchodziło w grę. Z pomocą przyszedł kod udostępniony przez członka społeczności Stackoverflow.
<?php
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><element></element>');
$request = $xml->addChild('request');
$request->addChild('type', 'test');
$sxe = simplexml_load_string('<sxe></sxe>');
$inner1 = $sxe->addChild("inner1");
$inner2 = $inner1->addChild("inner2");
$inner3 = $inner2->addChild("inner3");
$toDom = dom_import_simplexml($xml);
$fromDom = dom_import_simplexml($sxe);
$toDom->appendChild($toDom->ownerDocument->importNode($fromDom, true));
header('Content-type: application/xml; charset=utf-8');
echo $xml->asXML();
Oczywiście najważniejsze są tutaj linie 9-11, które to realizują całe zadanie kopiowania struktury pomiędzy XML.
Efekt poniżej:
<?xml version="1.0" encoding="UTF-8"?>
<element>
<request>
<type>test</type>
</request>
<sxe>
<inner1>
<inner2>
<inner3/>
</inner2>
</inner1>
</sxe>
</element>
Link do oryginału: http://stackoverflow.com/questions/4778865/php-simplexml-addchild-with-another-simplexmlelement/4778964#4778964
Nie można dodać widżetu na ekran
Jakimś dziwnym trafem udało mi się doprowadzić mojego Androida do problemu uniemożliwiającego dodanie widżetu kalendarza do ekranu. Z innymi widżetami nie próbowałem.
Czy jest to rozwiązanie właściwe i nie szkodzące telefonom? Nie potrafię odpowiedzieć, więc informuję, że wszelkie rzeczy, które wykonujecie na swoich telefonach robicie na własną odpowiedzialność.
Doprowadza to do praktycznie całkowitego zresetowania telefonu, czegoś na kształt przywrócenia ustawień fabrycznych, a co za tym idzie przywraca tapetę, ustawienia domyślne widżetów, itp. Aplikacje jednak działają jak należy – nie zauważyłem w związku z tym żadnych problemów.
Przyczyny ustalić mi się nie udało, jednak rozwiązaniem okazało się wyczyszczenie danych związanych z procesem HTC Sense, który znaleźć można w:
Ustawienia > Aplikacje > Zarządzaj aplikacjami > Wszystkie aplikacje > HTC Sense > Wyczyść dane
SimpleXMLElement innerHTML
W przypadku otrzymania niezbyt przyjaznego pliku XML, w którym to w tagu znajduje się wrzucony kod HTML (elementy p, span, strong, itp) nie otoczony <![CDATA[ i ]]>, zawartość tego tagu można by pobrać w następujący sposób:
echo preg_replace('#</?tag[^>]*>#is', '', (string)$xml->tag->asXML());
HTC Desire z systemem Android
Nadeszła chwila, kiedy to trzeba wreszcie przesiąść się z umierającego Symbiana na ostatni krzyk mody – zielonego robota. Dnia 13.05.2011 (piątek) przesiadłem się – miejmy nadzieję szczęśliwie – na urocze i podobno nieźle rozgarnięte dziecko Google’a. Zostaje przeczytać manual i cieszyć się z możliwości jakie to cudo oferuje. Z przykrością odsuwam od codziennych pieszczot moją wysłużoną, ukochaną Nokie E50 i mam nadzieję, że w zakamarkach szuflady zazna należytego Jej spokoju. Od dziś przedmiotem mych tortur oraz ponadprzeciętnego obmacywania zostaje HTC Desire.
Dziękuję Ci Nokio za te wszystkie lata spędzone razem, gdy byłaś przy mnie w dzień i w nocy, w smutku i radości.
SimpleXMLElement i count – zliczanie elementów obiektu w różnych wersjach PHP
Zliczanie elementów w obiekcie SimpleXMLElement. Jak się okazuje, możemy się zdziwić, jeśli na którymś z serwerów posiadamy wcześniejsze niż 5.3 wersje PHP.
$xml = new SimpleXMLElement("plik.xml", null, true);
$allNodes = 0;
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
$allNodes = $xml->Project->count(); // PHP >= 5.3
} else {
$allNodes = count($xml->children()); // PHP < 5.3
}
Przeniesienie wybranych elementów z początku tablicy na jej koniec
var t = ['jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć']; var t2 = t.splice(0,2); console.log(t.concat(t2)); // ["trzy", "cztery", "pięć", "sześć", "jeden", "dwa"]
Tworzenie nowego projektu w Yii
Ostatnio coraz więcej frameworków zostaje wyposażonych w skrypty pozwalające jeszcze bardziej przyspieszyć tworzenie aplikacji poprzez generowanie jak największej ilości kodu. W przypadku frameworka Yii możliwości jest sporo, od generowania struktury katalogów i plików samej aplikacji, po generowanie modułów, modeli, całej struktury CRUD w kontrolerach a w nowszych wersjach także kodu pozwalającego synchronizowanie struktury baz danych.
Nazewnictwo dla katalogów jest następujące:
WebRoot – katalog główny serwera HTTP – jego zawartość prezentuje się po wpisaniu http://localhost/ w pasku adresu przeglądarki. Dla mnie będzie to x:\htdocs\.
YiiDir – katalog w którym został zainstalowany framework Yii. W moim przypadku jest to x:\htdocs\yii.
AppDir – katalog aplikacji – tworzonego projektu. Na tutejsze potrzeby nazwijmy go demo. W tym przypadku, będzie to x:\htdocs\demo.
Oto co musimy zrobić, aby stworzyć nowy projekt z wykorzystaniem frameworka Yii.
Na początku oczywiście musimy posiadać zainstalowany framework – pobieramy go najlepiej na stronie projektu Yii framework. Wszystkie pliki wypakowujemy w katalogu YiiDir.
Następnym krokiem jest uruchomienie okna poleceń – cmd.exe i wpisanie następujących poleceń oraz słówka Yes w odpowiednim momencie.
> cd x:\htdocs > yii\framework\yiic webapp demo Create a Web application under 'x:\htdocs\demo'? [Yes|No] Yes unchanged css/bg.gif unchanged css/form.css unchanged css/ie.css unchanged css/main.css unchanged css/print.css unchanged css/screen.css generate index-test.php generate index.php unchanged protected/.htaccess unchanged protected/components/Controller.php unchanged protected/components/UserIdentity.php unchanged protected/config/console.php unchanged protected/config/main.php unchanged protected/config/test.php unchanged protected/controllers/SiteController.php unchanged protected/data/schema.mysql.sql unchanged protected/data/schema.sqlite.sql unchanged protected/data/testdrive.db unchanged protected/models/ContactForm.php unchanged protected/models/LoginForm.php unchanged protected/tests/bootstrap.php unchanged protected/tests/functional/SiteTest.php unchanged protected/tests/phpunit.xml unchanged protected/tests/WebTestCase.php unchanged protected/views/layouts/column1.php unchanged protected/views/layouts/column2.php unchanged protected/views/layouts/main.php unchanged protected/views/site/contact.php unchanged protected/views/site/error.php unchanged protected/views/site/index.php unchanged protected/views/site/login.php unchanged protected/views/site/pages/about.php unchanged protected/yiic unchanged protected/yiic.bat unchanged protected/yiic.php unchanged themes/classic/views/.htaccess Your application has been created successfully under x:\htdocs\demo. >
Tak, to już. Posiadamy działającą aplikację. Wystarczy wejść na stronę http://localhost/demo by zobaczyć działającą stronę kontakt z formularzem, logowanie oraz wyświetlanie stron, proste menu, breadcrumb.
Drag & Drop dla wierszy w tablicy [jQuery UI]
Drag & drop powstały z drobnej modyfikacji Sortable z jQuery UI; do ściągnięcia kompletny przykład sortable.zip



