Létezik egy jQuery fgv: show(). Ennek az a szerepe, hogy a nem látható html elemet láthatóvá teszi.
Tehát végülis annyi történik, hogy egy html elemet ami el van rejtve (display: none;) megmutat, mégpedig úgy, hogy inline css-sel ad neki egy display: block tulajdonságot.
Ez így rendben is lenne, ha nem akarnánk táblázatok soraira is alkalmazni (table tr). A probléma az, hogy pl. a Firefox szétcsúszik, ha a sor elemre vonatkozó css display: block. Erre a megoldás a display: table-row css definíció. Ezzel viszont az a gond, hogy az IE nem támogatja. Az IE viszont kezeli a táblázat soraira is a display: block tulajdonságot.
Nem értem miért nem építették bele a jQuery-be a böngésző ellenőrzését a show() fgv. meghívása esetében, de akkor vegyük figyelembe magunk, hiszen nem mindegy, hogy a táblázatunk így néz ki:
Vagy így:
Láthatjuk, hogy az első esetben a táblázat első oszlopa sokszorosára nőtt, ezért az oldal szétcsúszott.
JS-ből lekérdezni a böngésző típusát, nem nehéz, és a jQuery-be is beépített (core).
A következő kódot aztán símán beépíthetjük egy saját fgv-be.
-
<script type="text/javascript">
-
function show_tr_element(object) {
-
if ($.browser.msie) {
-
object.show();
-
} else {
-
object.css("display", "table-row");
-
}
-
}
-
</script>
Posted in Böngésző fix, CSS, DHTML, jQuery
Az egyik általam készített Drupal alapú webáruház termékeinek adminisztrálása CSV alapon működik. Ez annyit jelent, hogy van egy exportáló felület, ahol a site admin lementheti a termékeit egy csv fájlba, amit aztán valamilyen csv-t kezelő programban (általában Microsoft Excel) átszerkeszt, és egy importáló felületen feltölt. Ezután az oldal feldolgozza és érvénybe lépnek a változtatások.
Ez így mind szép és jó, csak egy gond van vele. A windows felhasználók nagy része, ISO-8859-2-es karakterkódolást használ, míg a Drupal UTF-8-at. Hogy a címek és egyéb karakterkódolástól függő érték problémáját kiküszöböljük, szükség van az mb_convert_encoding() fgv-re, amely segítségével az ISO-8859-2 karakterkódolású részeket, át tudjuk konvertálni a Drupal-nak is használható UTF-8-as karakterkódolásba.
Egyszercsak jelentkezett egy probléma. Azon kezdőbetűk amelyek ékezetesek egyszerűen elvesztek. Tehát például az “Öntapadó” szóból, “ntapadó” lett.
Elkezdtem debuggolni, és azt vettem észre, hogy a feldolgozásra használt beépített fgetcsv() PHP fgv. hibásan működik az ISO-8859-2-es karakterkódólásű fájlok feldolgozásában. A probléma az volt, hogy már a beolvasáskor elvesztek ez ékezetes kezdőbetűk, tehát még az átkonverálás előtt. Ha pedig már akkor elveszett, akkor utólag már nem lehet neki mit csinálni.
Úgyhogy az explode() fgv-t segítségül hívva írtam egy saját, egyszerűsített csv feldolgozó fgv-t, ami erre a célra pont alkalmas:
-
<?php
-
function fgetcsv_iso_8859_2($handle, $length, $separator) {
-
-
if (!feof($handle)) {
-
return explode($separator, fgets($handle, $length));
-
} else {
-
return false;
-
}
-
-
}
-
?>
Persze ez így nem kezeli azon csv fájlokat, amikben mondjuk a mezők értékei ” (macskaköröm) között helyezkednek el, ám az én esetemben erre nem volt szükség. Ha mégis kellene, ki lehet egészíteni a fgv-t:
-
<?php
-
function fgetcsv_iso_8859_2($handle, $length, $separator) {
-
$enclosed = '"';
-
$out = array();
-
-
if (!feof($handle)) {
-
$fields = explode($separator, fgets($handle, $length));
-
foreach ($fields as $field_data) {
-
if (preg_match("/^\\$enclosed/i", $field_data)) {
-
$field_data = preg_replace("/(^\\$enclosed|\\$enclosed$)/i","", $field_data);
-
}
-
$out[] = $field_data;
-
}
-
return $out;
-
} else {
-
return false;
-
}
-
-
}
-
?>
Posted in Drupal, PHP