darksign
-
Posts
198 -
Joined
-
Last visited
Posts posted by darksign
-
-
Ja vajag, varu uzstādīt/iedot paša rakstītu moduli PrestaShop veikalam priekš FirstData.lv
Kam vajag, tas uzraksta privāti.
-
jā, varbūt nav vērts iespringt. nu bet vai tad cilvēkam, kurš katru dienu ņemās ar visu html kodēšanu, nebūs kāds konkrētas lietas ko var fiksi - nu .. stundas vai dienas laikā izdarīt?
piem:
* png problēma
* izkārtojumu pa lielam pielāgot (nav jābūt visam perfekti, bet funkcionālam)
* citas problēmas.. ko tagad vakarā nevaru atcerēties :)
utt..
Bet ok, pat ja ne IE6.. varbūt ir kāds smarty koderis / eksperts ? :)
-
Sveiki,
Man nepieciešams, ir modificēt vienu prestashop tēmu.
Nepieciešamās lietas:
* modificēt sagatavēs "div" vai css tā, lai lapa būtu dinamiski staipāma.
* atrisināt dažus svarīgākos compability issues ar IE 6 un uz augšu. (nja.. konstatēju, ka joprojām lietotāju starpā tiek izmantots)
Ja kāds zin, un ir darbojies ar prestashop, smarty templeitiem un UI, tad rakstat, un dodat ziņu.
-
Varbūt MS Word + Visual Basic macros.. vismaz pirms 10 gadiem tas būtu variants, kā šodien, īsti nezinu
Piekrītu.. es vismaz sākumam ieteiktu apgūt VB macros.. jo tad varētu izmantot wordu utt. Lietot šo makrosu visiem saviem word dokumentiem.
Taču, ja ir teksta fails "fails.txt", tad priekš programmēšanas apgūšanas labs būtu kaut vai tas pats vecais labais "Pascal" ... nu bet kad būsi šos te apguvis, tad arī ņem tālāk - PHP, Pyton... un pēc tam C, C++, C#, Java :)
-
Viss, pats atradu.. topiks slēgts.
Vienkārši php dokumentācijā trūkst apraksts par "openssl_pkcs12_export" funkcijas optional parametru $args, tāpēc arī tik ilgi gāja.
Paldies visiem, kas vismaz centās iedziļināties :)
-
Hmm, pamācībās arī tika dots līdzi batch fails, kur tika prasīts tikai, lai ievada tur vajadzīgos datus.
Jā tāds fakts ir, bet kāds šim faktam sakars ar minētajām php funkcijām. Un to būtību, ka neizdodas ar php funkcijām ģenerēt p12 failu, kurā būtu iešūts arī CAcert ?
To funkciju sarakstu esmu redzējis un pētījis daudzkārt, bet tā arī neesmu atradis, kura no funkcijām ļautu iešūt p12 failā klāt to CAcert.
Vai kāds varētu palīdzēt?
-
nu man vnk. ir uzdevums, uztaisīt tā, lai lietotājs var pats mainīt visus sertifikātus ar vienkāršu "upload" vai arī "send-to-email" pogām... kā arī ir izdiskutēts jautājums.. taču, pasūtītājs grib, lai tā ir.
p.s. nav tā ka tikai vienreiz.. šobrīd tas ir jādara katru gadu. (tur ar tas suns aprakts - vienreiz uztaisīšu, pēc tam, useris, varēs lietot nebēdājot, ka neko nezin no openssl, vai arī, ja developeris nav sasniedzams)
galu galā, vienalga par to pamatojumu, bet vai tad ar tīru PHP nevar izdarīt šo darbiņu???
-
To ko var izdarīt izmantojot komandrindu ir šādi:
openssl pkcs12 -export -in tirgotajs.pem -out tirgotajs.p12 -certfile CACert.pem -inkey tirgotajs_key.pem
Rezultātā tiek noģenrerēts p12 fails. Šeit tiek izmantots arī parametrs "-certfile". (p.s. CACert.pem ir tas pats ECOMM.pem ko FDL atsūta)
Pēc tam tiek ģenerēts keystore fails:
openssl pkcs12 -in tirgotajs.p12 > tirgotajs_keystore.pem
Tad nu nepieciešams šīs divas rindiņas pārvērst uz PHP kodu.
Forumos atradu ka citi joprojām izmanto konsoli (exec() funkciju), taču tas man neder (arhīva pēc ieliku citātu) [avots: http://www.phpbuilde....php?t=10321977]:
2. Create a PEM encoded certificate using above TEST.crt
$exestr = "openssl pkcs12 -export -in TEST.crt -inkey MY_PRIVATE_KEY [b]-certfile MY_CA_CERT[/b] -name blablabla -passin pass:MYPASS -passout pass:MYPASS -out TMPCERT"; $exestr2 = "openssl pkcs12 -in TMPCERT -passin pass:MYPASS -passout pass:MYPASS -out TEST.pem";
Līdz šim man ir izdevies uzģenerēt to pašu p12 failu ar šādu te veidu:
openssl_pkcs12_export($signed_csr, $cerificate_out, $private_key_resource, "parole"); //p.s. $signed_csr <-- parakstiits "tirgotajs.pem" ko atsuuta FDL, un $private_key_resource -- tirgotaja privaataa atsleega // $cerificate_out -> On success, this will hold the PKCS#12. file_put_contents("./certificate.p12", $cerificate_out); //saglabaajam failaa
Atšķirība tāda, ka PHP koda piemērā netiek izmantots CA sertifikāts jeb "-certfile CACert.pem".
Līdz ar to, kā tālāk izveidot keystore failu?
Jo PHP funkcijas izmantojot, vienīgais ko varu izdomāt ir:
$certs_pem = array(); $pkcs12 = file_get_contents($certificate_p12_path); openssl_pkcs12_read($pkcs12, $certs_pem, $passphrase); echo "<br />Certificate keystore arr: <br />"; print_r($certs_pem);
Un šajā gadījumā $certs_pem satur šādu te masīvu:
Array ( [cert] => -----BEGIN CERTIFICATE----- ....... -----END CERTIFICATE----- [pkey] => -----BEGIN RSA PRIVATE KEY----- ............. -----END RSA PRIVATE KEY----- [extracerts] => Array ( ) )
Taču konsolē ģenerētais KeyStore fails satur šādu struktūru:
Bag Attributes localKeyID: 64 7A 55 FE 29 .............................4 D1 C7 E9 CF subject=/C=lv/O=veikals.lv/CN=tirgotajaID issuer=/C=LV/ST=Riga/L=Riga/O=BSC/OU=BSC/CN=ECOMM/[email protected] -----BEGIN CERTIFICATE----- ............. -----END CERTIFICATE----- Bag Attributes: <No Attributes> subject=/C=LV/ST=Riga/L=Riga/O=BSC/OU=BSC/CN=ECOMM/[email protected] issuer=/C=LV/ST=Riga/L=Riga/O=BSC/OU=BSC/CN=ECOMM/[email protected] -----BEGIN CERTIFICATE----- ............. -----END CERTIFICATE----- Bag Attributes localKeyID: 64 7A 55 FE 29 CE B........................C7 E9 CF Key Attributes: <No Attributes> -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,4A53F67F2ACB00AE ...................... -----END RSA PRIVATE KEY-----
Kā ar PHP var uztaisīt to pašu keystore failu? Un kur ielikt to CAcert.pem?
Cerams, ka kāds zinošāks palīdzēs, jo līdz šim neko neesmu atradis kur ievietot to CAcert...
p.s. ir pieejams arī pkcs7 formāta (it kā chain) fails, ko FDL sūta pielikumā, bet tā kā konsoles komandās tas netiek izmantots, tad diez vai vajag to izmantot priekš PHP.
-
Varbūt pašiem atrotītām piedurknēm jāpastrādā pie profesijas prestiža celšanas?
Pilnīgi piekrītu...
-
Es balsoju par PrestaShop, šis kaut kā vairāk patīk gan no lietojamības, gan no koda puses (nav tik izčakarēts, kā Joomla VirtueMart vai arī OsCommerce, un vieglāk - intuitīvāk saprotams).
-
piekrītu daGrevis idejai, + vari no localhosta uztaisīt skriptu, ka tad kad tu palaid, tad viņš nokačā tavu backup failu un importē to tavā localhostā.. jo es sapratu, ka galvenā lieta ir abpusēja integritāte. .. vismaz ar datubāzi tā var rīkoties, taču ar pašiem failiem iesaku jau sen pārbaudītu lietu - subversions jeb SVN :) kas un kā.. SVN lietošanas rokasgrāmata :D
-
p.s. atradu vēl vienu bagu, kur autors samudžinājies ifos bija, tad nu nomainīju arī iepriekšējam postam šo rindiņu:
return ($n{0} == 1 ? (substr($n, 1) == '00' ? 'simts' : 'viens simts') : $digits[$n{0}] . ' ' . 'simti') . ' ' . _number2stringSmall(substr($n, 1));
pret šo:
return $digits[$n{0}] . ($n{0} == 1 ? ' simts' : ' simti') . ' ' . _number2stringSmall(substr($n, 1));
Jo iepriekš bija kļūda, piemēram, ja summa ir 51010, tad uzrakstītais teksts ir "piecdesmit viens tūkstotis simti desmit latu", kaut gan vajadzētu "piecdesmit viens tūkstotis simts desmit latu".
Lūk arī vēl viens apstiprinājums kiss metodikai, ka jo vienkāršāk rakstam kodu, jo vienkāršāk pašam un citiem saprast ko mēs tur vispār daram... jo uz sākotnējo rindu man vismaz nav ērti skatīties.. kad tiek dubultoti ifi ar šo konkrēto speciālo sintaksi. Lai gan ērti izmantot, un dažreiz pat labi (nav jātaisa papildus mainīgie), bet tomēr, manuprāt, grūtāk salasīt un ātri ieraudzīt vienkāršas kļūdas.
-
-
110 pareizi nebūtu "simt desmit", nevis kā tiek izdrukāts - "simts desmit" ?
Nē, ja raksta atsevišķi, tad pareizi ir "simts desmit", bet ja kopā, tad "simtdesmit" ! ;)
-
Un ja gribam lielisku funkciju, kas latviešu valodā pārvērš skaitļus par summu vārdos, tad pie esošajām funkcijām pievienojam vēl trīs funkcijas, un šeit gatavais rezultāts (apvienoju speciāli priekš ātrajiem copy & paste variantiem):
if (!function_exists('number2string')) { function number2string($n) { //$n = (int)$n; if ($n < 0) $b = 'mīnus '; //$n = abs($n); if ($n == '0') { return 'nulle'; } else { return $b . _number2stringBig($n); } } } if (!function_exists('_number2stringBig')) { function _number2stringBig($n) { if ($n == '0') return; $e = Array( Array( '1' => 'tūkstotis', '2' => 'miljons', '3' => 'miljards', '4' => 'triljons', '5' => 'kvadriljons', '6' => 'kvintiljons', '7' => 'sekstiljons', '8' => 'septiljons', '9' => 'oktiljons', '10' => 'nontiljons', '11' => 'deciljons', '12' => 'undeciljons', '13' => 'duodeciljons', '14' => 'trideciljons', '15' => 'kvartdeciljons', '16' => 'kvintdeciljons', '17' => 'seksdeciljons', '18' => 'septdeciljons', '19' => 'oktdeciljons', '20' => 'nondeciljons', ), Array( '1' => 'tūkstoši', '2' => 'miljoni', '3' => 'miljardi', '4' => 'triljoni', '5' => 'kvadriljoni', '6' => 'kvintiljoni', '7' => 'sekstiljoni', '8' => 'septiljoni', '9' => 'oktiljoni', '10' => 'nontiljoni', '11' => 'deciljoni', '12' => 'undeciljoni', '13' => 'duodeciljoni', '14' => 'trideciljoni', '15' => 'kvartdeciljoni', '16' => 'kvintdeciljoni', '17' => 'seksdeciljoni', '18' => 'septdeciljoni', '19' => 'oktdeciljoni', '20' => 'nondeciljoni', ), ); //$n = (string)abs($n); $length = strlen((string)$n); $pow = ceil($length / 3) - 1; $digits = ($length - 1) % 3 + 1; $begin = substr($n, 0, $digits); $s = _number2stringSmall($begin); if ($pow > 0) { $end = substr($n, $digits); if (substr($begin, -1) == 1 && substr($begin, 0, 1) == 1) { $middle = $e[0][$pow]; } else { $middle = $e[1][$pow]; } $s .= ' ' . $middle; $s .= ' ' . _number2stringBig($end); } return $s; } } if (!function_exists('_number2stringSmall')) { function _number2stringSmall($n) { $digits = Array('', 'viens', 'divi', 'trīs', 'četri', 'pieci', 'seši', 'septiņi', 'astoņi', 'deviņi'); $preDigits = Array('', 'vien', 'div', 'trīs', 'četr', 'piec', 'seš', 'septiņ', 'astoņ', 'deviņ'); $n = (string)$n; $l = strlen($n); if ($l > 3) return false; if ($l == 3) { return $digits[$n{0}] . ($n{0} == 1 ? ' simts' : ' simti') . ' ' . _number2stringSmall(substr($n, 1)); } else { if ($l == 1) return $digits[$n]; if ($n{0} == 1) { if ($n == '10') return 'desmit'; return $preDigits[$n{1}] . 'padsmit'; } $s = $preDigits[$n{0}] . 'desmit'; if ($n{1} != '0') { $s .= ' ' . $digits[$n{1}]; } return $s; } } } function addBigCurrency($n) { $last = substr($n, -1); if($last == 0) { return " latu"; } elseif($last == 1) { return " lats"; } else { return " lati"; } } function addSmallCurrency($n) { $last = substr($n, -1); if($last == 0) { return " santīmu"; } elseif($last == 1) { return " santīms"; } else { return " santīmi"; } } function amount2words($num) { if($num > 999999999999999999999999999999999999999999999999999999999999999.99) { return "ERROR: Skaitlis ir par lielu!"; } elseif($num < -999999999999999999999999999999999999999999999999999999999999999.99) { return "ERROR: Skaitlis ir par mazu!"; } else { //funkcija pieņem tikai skaitļus ar "." kā decimālattalītāju $parts = explode(".", $num); if(count($parts) <= 2) { $int = $parts[0]; $dec = $parts[1]; $str_resp = number2string($int).addBigCurrency($int); if(count($parts) == 2) { if($dec > 99 || $dec < 0) { return "ERROR: Unknown situation!"; } elseif($dec > 0 || $dec < 10) { if(strlen($dec) > 1) { $dec = intval($dec); } else { $dec = $dec * 10; } $str_resp .= " un ".$dec.addSmallCurrency($dec); } else { $str_resp .= " un ".$dec.addSmallCurrency($dec); } } //RG: ja nepieciešams izvadīt arī 00 santīmus, kad tie nav pierakstīti! /* else { $str_resp .= " un 00".addSmallCurrency($dec); } //*/ return $str_resp; } else { return "ERROR: Unknown situation!"; } } }
Piemērs:
echo "<br>number2string: ".amount2words(3456.99)."<br>"; //number2string: trīs tūkstoši četri simti piecdesmit seši lati un 99 santīmi
Ja nu kāds atrod vēl kādu kļūdu, vai ieteicamu uzlabojumu, tad droši, rakstam, ja varam, tad arī labojam.. un postojam iekšā :)
-
Tātad, dažreiz vajag arī lielākus skaitļus, līdz ar to, papildināju funkciju, t.s. noņēmu arī tos liekos (int) un abs(), jo tie ierobežo skaitļus līdz int maksimumam.
Tagad max skaitlis, ko šī funkcija māk uzrakstīt ir "999999999999999999999999999999999999999999999999999999999999999" -> skaitlis ar 63 cipariem. (bez decimāldaļām)
Uzrakstot šo skaitli, sanāk šāds te teksts:
number2string:deviņi simti deviņdesmit deviņi nondeciljoni deviņi simti deviņdesmit deviņi oktdeciljoni deviņi simti deviņdesmit deviņi septdeciljoni deviņi simti deviņdesmit deviņi seksdeciljoni deviņi simti deviņdesmit deviņi kvintdeciljoni deviņi simti deviņdesmit deviņi kvartdeciljoni deviņi simti deviņdesmit deviņi trideciljoni deviņi simti deviņdesmit deviņi duodeciljoni deviņi simti deviņdesmit deviņi undeciljoni deviņi simti deviņdesmit deviņi deciljoni deviņi simti deviņdesmit deviņi nontiljoni deviņi simti deviņdesmit deviņi oktiljoni deviņi simti deviņdesmit deviņi septiljoni deviņi simti deviņdesmit deviņi sekstiljoni deviņi simti deviņdesmit deviņi kvintiljoni deviņi simti deviņdesmit deviņi kvadriljoni deviņi simti deviņdesmit deviņi triljoni deviņi simti deviņdesmit deviņi miljardi deviņi simti deviņdesmit deviņi miljoni deviņi simti deviņdesmit deviņi tūkstoši deviņi simti deviņdesmit deviņi
if (!function_exists('number2string')) { function number2string($n) { //$n = (int)$n; if ($n < 0) $b = 'mīnus '; //$n = abs($n); if ($n == '0') { return 'nulle'; } else { return $b . _number2stringBig($n); } } } if (!function_exists('_number2stringBig')) { function _number2stringBig($n) { if ($n == '0') return; $e = Array( Array( '1' => 'tūkstotis', '2' => 'miljons', '3' => 'miljards', '4' => 'triljons', '5' => 'kvadriljons', '6' => 'kvintiljons', '7' => 'sekstiljons', '8' => 'septiljons', '9' => 'oktiljons', '10' => 'nontiljons', '11' => 'deciljons', '12' => 'undeciljons', '13' => 'duodeciljons', '14' => 'trideciljons', '15' => 'kvartdeciljons', '16' => 'kvintdeciljons', '17' => 'seksdeciljons', '18' => 'septdeciljons', '19' => 'oktdeciljons', '20' => 'nondeciljons', ), Array( '1' => 'tūkstoši', '2' => 'miljoni', '3' => 'miljardi', '4' => 'triljoni', '5' => 'kvadriljoni', '6' => 'kvintiljoni', '7' => 'sekstiljoni', '8' => 'septiljoni', '9' => 'oktiljoni', '10' => 'nontiljoni', '11' => 'deciljoni', '12' => 'undeciljoni', '13' => 'duodeciljoni', '14' => 'trideciljoni', '15' => 'kvartdeciljoni', '16' => 'kvintdeciljoni', '17' => 'seksdeciljoni', '18' => 'septdeciljoni', '19' => 'oktdeciljoni', '20' => 'nondeciljoni', ), ); //$n = (string)abs($n); $length = strlen((string)$n); $pow = ceil($length / 3) - 1; $digits = ($length - 1) % 3 + 1; $begin = substr($n, 0, $digits); $s = _number2stringSmall($begin); if ($pow > 0) { $end = substr($n, $digits); if (substr($begin, -1) == 1 && substr($begin, 0, 1) == 1) { $middle = $e[0][$pow]; } else { $middle = $e[1][$pow]; } $s .= ' ' . $middle; $s .= ' ' . _number2stringBig($end); } return $s; } } if (!function_exists('_number2stringSmall')) { function _number2stringSmall($n) { $digits = Array('', 'viens', 'divi', 'trīs', 'četri', 'pieci', 'seši', 'septiņi', 'astoņi', 'deviņi'); $preDigits = Array('', 'vien', 'div', 'trīs', 'četr', 'piec', 'seš', 'septiņ', 'astoņ', 'deviņ'); $n = (string)$n; $l = strlen($n); if ($l > 3) return false; if ($l == 3) { return ($n{0} == 1 ? (substr($n, 1) == '00' ? 'simts' : 'viens simts') : $digits[$n{0}] . ' ' . 'simti') . ' ' . _number2stringSmall(substr($n, 1)); } else { if ($l == 1) return $digits[$n]; if ($n{0} == 1) { if ($n == '10') return 'desmit'; return $preDigits[$n{1}] . 'padsmit'; } $s = $preDigits[$n{0}] . 'desmit'; if ($n{1} != '0') { $s .= ' ' . $digits[$n{1}]; } return $s; } } }
Ceru, ka noderēs ;)
p.s. iespējams, ka pirms likšanas funkcijā vajag nedaudz validācijas, jo ir noņemti tie abs() utt. kas bija sākumā ;)
-
ipk.. ;)
Kā arī, ieteicams, ja lieto priekš grāmatvedības rēķiniem, tad lietot formu "viens simts ...", nevis "simtu ..."
Ja vajag šādu formu, tad aizvietojam šo rindu:
return ($n{0} == 1 ? (substr($n, 1) == '00' ? 'simts' : 'simtu') : $digits[$n{0}] . ' ' . 'simti') . ' ' . _number2stringSmall(substr($n, 1));
ar šo:
return ($n{0} == 1 ? (substr($n, 1) == '00' ? 'simts' : 'viens simts') : $digits[$n{0}] . ' ' . 'simti') . ' ' . _number2stringSmall(substr($n, 1));
-
Ievadot skaitli "151911351"
number2string izvada: simtu piecdesmit viens miljons deviņi simti vienpadsmit tūkstotis trīs simti piecdesmit viens
Kaut gan, vajadzētu: simtu piecdesmit viens miljons deviņi simti viendpadsmit tūkstoši trīs simti piecdesmit viens
Kā arī, ieteicams, ja lieto priekš grāmatvedības rēķiniem, tad lietot formu "viens simts ...", nevis "simtu ..."
Kā arī vārds miljons, rakstās "miljons" nevis "milijons"
Te būs izlabotās funkcijas:
if (!function_exists('number2string')) { function number2string($n) { $n = (int)$n; if ($n < 0) $b = 'mīnus '; $n = abs($n); if ($n == '0') return 'nulle'; else return $b . _number2stringBig($n); } } if (!function_exists('_number2stringBig')) { function _number2stringBig($n) { if ($n == '0') return; $e = Array( Array( '1' => 'tūkstotis', '2' => 'miljons', '3' => 'miljards', ), Array( '1' => 'tūkstoši', '2' => 'miljoni', '3' => 'miljardi', ), ); $n = (string)(int)abs($n); $length = strlen((string)$n); $pow = ceil($length / 3) - 1; $digits = ($length - 1) % 3 + 1; $begin = substr($n, 0, $digits); $s = _number2stringSmall($begin); if ($pow > 0) { $end = substr($n, $digits); if (substr($begin, -1) == 1 && substr($begin, 0, 1) == 1) { $middle = $e[0][$pow]; } else { $middle = $e[1][$pow]; } $s .= ' ' . $middle; $s .= ' ' . _number2stringBig($end); } return $s; } } if (!function_exists('_number2stringSmall')) { function _number2stringSmall($n) { $digits = Array('', 'viens', 'divi', 'trīs', 'četri', 'pieci', 'seši', 'septiņi', 'astoņi', 'deviņi'); $preDigits = Array('', 'vien', 'div', 'trīs', 'četr', 'piec', 'seš', 'septiņ', 'astoņ', 'deviņ'); $n = (string)(int)$n; $l = strlen($n); if ($l > 3) return false; if ($l == 3) { return ($n{0} == 1 ? (substr($n, 1) == '00' ? 'simts' : 'simtu') : $digits[$n{0}] . ' ' . 'simti') . ' ' . _number2stringSmall(substr($n, 1)); } else { if ($l == 1) return $digits[$n]; if ($n{0} == 1) { if ($n == '10') return 'desmit'; return $preDigits[$n{1}] . 'padsmit'; } $s = $preDigits[$n{0}] . 'desmit'; if ($n{1} != '0') { $s .= ' ' . $digits[$n{1}]; } return $s; } } }
p.s. nepatīk paste.php.lv un nelietošu tīši, kamēr nebūs ieviesta tik nepieciešama lieta, kā utf8 kodējums ;)p
-
Ievadot skaitli "151911351"
number2string izvada: simtu piecdesmit viens miljons deviņi simti vienpadsmit tūkstotis trīs simti piecdesmit viens
Kaut gan, vajadzētu: simtu piecdesmit viens miljons deviņi simti viendpadsmit tūkstoši trīs simti piecdesmit viens
Kā arī, ieteicams, ja lieto priekš grāmatvedības rēķiniem, tad lietot formu "viens simts ...", nevis "simtu ..."
Kā arī vārds miljons, rakstās "miljons" nevis "milijons"
-
Lai darbojies pie summām zem 1Ls un arī ar 0Ls!
http://paste.php.lv/b99a473bd15ae69e27cc94ad18d515f4?lang=php
Ievadot 100.99 tagad dabū ārā "viens simts nulle lati un 99 santīmi"
Un vēl būtu jāpalabo, ja raksta "viens simts", tad galotne, ir "latu", nevis "lati"! Tas pats gramatikas likums kā ar santīmiem ;)
-
Pirmkārt, paldies, ka cenšaties palīdzēt, bet atbildes man liek smaidīt, un šķiet, ka nu reiz jums pienācis atkārtot html pamatus .. tai skaitā specializētos tagus ;)
imo, browseris vnk izravē nesaprotamu tagu, tāpat kā normalizē <br /> uz <br> (jo normāli gandrīz visas XHTML lapas tiek renderētas kā html transitional, bet tas ir atsevišķš temats, kāpēc). tobish, jquery vēršas pie DOMa, kurā laikam nav tas xmp.
p.s. es tikai skaļi domāju.
p.p.s. wtf is xmp? Atradu, ka tas ir kaut kāds adobes tags
jap, pārlūkprogramma izravē gan, bet ne jau tagus! p.s. <xmp> nav nesaprotams tags, bet viens no pamattagiem. Un tas nav nekādā saistībā ar adobe!
<xmp> ir PHP htmlspecialchars() alternatīva HTML pusē :)
bravo.. :)
elementsArr[fid] tev neatgriež jQuery referenci, bet DOM nodi, attiecīgi tai nav metožu .html() un .text(). Lieto elementsArr.eq(fid).text()
nop! viņš atgriež visu to ko man vajag, un viņam ir gan .html() gan .text() metodes. p.s. arī DOM elementiem, jQuery atļauj izsaukt šīs metodes.
Tas ir tags , kurš tika uzskatīts par novecojušu, skākot ar HTML3.2 versiju (1997. gads).
Tā vietā tika ieteikts izmantot <pre>.
Nezinu, kas un kāpēc viņu uzskata par novecojušu, bet viņš ir ļoti noderīgs, izmantoju gandrīz katru dienu, kad vajag debugot svešu kodu, bez jebkādām iespējām lietot xDebugerus utt..
<pre> - tags nespēj aizvietot <xmp> funkcionalitāti!
Lai būtu skaidrs, tad te piemērs, kas demonstrē atšķirības starp <xmp> un <pre> tagiem.
Piemēram, man no datubāzes tiek dabūti kaut kādi dati, un es nezinu vai konkrētie dati satur html, vai nē, bet gribu redzēt, kas tad īsti tur ir tiešā veidā, netērējot laiku uz view-source utt.
Līdz ar to.
Ja man ir šāds masīvs:
$arr = array(); $arr['a'] = "pirmais elements"; $arr['b'] = "<b>otrais</b> elements"; $arr['c'] = "<hr>treshais<div style='display:none'> elements</div>";
Izprintējot ārā
echo "<pre>"; print_r($arr); echo "</pre>";
un izvadot starp <pre> tagiem, es iegūšu šādu redzamu rezultātu:
Array
(
[a] => pirmais elements
=> otrais elements
[c] =>
__________________________________________
treshais
)
Bet tai pat laikā ja izvadīšu
echo "<xmp>"; print_r($arr); echo "</xmp>";
ārā starp <xmp> tagiem, tad redzamais rezultāts būs šāds:
Array
(
[a] => pirmais elements
=> <b>otrais</b> elements
[c] => <hr>treshais<div style='display:none'> elements</div>
)
Ja tiek izvadīts ar <pre> tagiem, tad teksts tiek noformēts un html izpildās, bet ja <xmp> tad html kods starp šiem tagiem neizpildās (DOM to saturu uztur parasti ar speciāliem simboliem, un to neparsē).
Līdz ar to, tad kad kādā lielā sistēmā nezinot, vai mainīgais satur, vai nesatur html tagus, ir ļoti ērti izvadīt izmantojot tieši xmp tagus, un pat ja tā vietā izmantotu htmlspecialchars(), tad būtu jādomā kas tad īsti ir tajā mainīgajā.. pirms parsēšanas utt.. bet ar xmp.. viss vienkāršais ir ģeniāls :))
-
nop, es jau tieši šo situāciju aprakstīju, ka neder nedz .html() nedz .text() .. vismaz tīrā veidā nē!
jo mainīgais data vienmēr būs smuks html, bet .text() būs tikai teksts, bez jebkādiem html tagiem, bet .html() rādīs tikai pirmā līmeņa tagus ("<xmp>" gadījumā!!!) un visu kas zem viņa, tas būs izfiltrēts un aizvietots ar speciāliem simboliem.
lai gan, iespējams problēma ir tā, ka tieši <xmp> tags ir tas īpašais, jo pārlūks visu saturu iekš viņa nevis atstā neaiztiktu, bet pārvērš tā, lai pats nesaprastu! hmm.. kaut gan drīzāk vajadzētu vienkārši ignorēt un neparsēt!
konkrētajā gadījumā, man vajadzīgo problēmu esmu atrisinājis pavisam savādākā veidā.. bet šis jautājums joprojām paliek interesants, kā būt, vai kā nebūt.. vai vispār kaut ko tādu drīkst uzdrīkstēties gaidīt no html + javascript arī ar <xmp> tagiem :)
-
p.s. to admins.. plz pārliekat uz javascript sadaļu.. :) jo šķiet, ka ne īsti tur iepostoju :)
-
Problēmas apraksts:
izmantojot ajax dabūju no php skripta sev vajadzīgos datus, kas satur html.
Piemēram, no php faila, tika atgriezta šāda virkne:
<br /><xmp>Array ( [start_date] => 0000-00-00 00:00:00 [end_date] => 2011-01-14 12:00:00 [closed_date] => 0000-00-00 [published] => 1 [close_offer] => 0 ) </xmp>800020.00
Ja šos datus ievietoju HTML elementā ar jQuery(..selektors..).html(dati), un pēc tam pie tā vēršos ar jQuery(..selektors..).html() (analogs parastam innerHTML) tad iegūstu šādu rezultātu:
<br><xmp>Array ( [start_date] => 0000-00-00 00:00:00 [end_date] => 2011-01-14 12:00:00 [closed_date] => 0000-00-00 [published] => 1 [close_offer] => 0 ) </xmp>800020.00
Bet ja vēršos ar jQuery(..selektors..).text(dati) jeb innerText, tad rezultātā iegūstu šādu virkni:
Array ( [start_date] => 0000-00-00 00:00:00 [end_date] => 2011-01-14 12:00:00 [closed_date] => 0000-00-00 [published] => 1 [close_offer] => 0 ) 800020.00
Problēma sekojoša, gribu updeitot datus tikai tad, ja tie mainās.
Bet šajā gadījumā, sanāk, ka viņi ir visu laiku savādāki, jo pielietojot šādu salīdzināšanu, vienmēr dati būs atšķirīgi:
if(elementsArr[fid].html() != data) { elementsArr[fid].html(data); jQuery(field).effect("highlight", 500); }
p.s. debugoju izmantojot firebug konsoles iespējas.. līdz ar to ieraudzīju, ka problēma ir ar ">" simboliem:
//Tikai debugoshanai ieksh FireFox + FireBug
console.log("Elementa saturs: " + elementsArr[fid].html());
console.log("Elementa saturs txt: " + elementsArr[fid].text());
console.log("Datu saturs: " + data);
Kādam ir bijusi vajadzība šādi salīdzināt? Kādā veidā ir iespējams ar JS dabūt arā raw html no elementa, arī lai subelementus rāda ar normāliem html nevis parsētiem tagiem?
Foruma migrācija
in Atsauksmes, ierosinājumi, lamu vārdi
Posted
Es par pirmo variantu.
Turklāt ja ir mūža licence un nav bails ka kāds lauzīs augšā (nu bankas kodus jau šeit neturi) - tad vispār varētu vēl uz pāris gadiem atstāt kā ir. Paralēli - ja iznāks cienīga cita opensource versija - nu tad var domāt par trešo.