jak zapsat absolutní adresu s polem

Newer
Člen | 47
+
0
-

Ahoj,

Prosím, tušíte:
jakým způsobem sestavit absolutní url adresu, ve které v jednom parametru (Ids) předávám pole viz níže.


$pole = [1,2,3];

Nette mi generuje:

http://localhost/farma/sprava-objednavek/?Ids%5B0%5D=1&Ids%5B1%5D=2&Ids%5B2%5D=3&do=labelPdf

z cehož dokážu odvodit

  • že %5B je zástupný znak pro [
  • 5e %5D je zástupný znak pro ]

z přepisu je teda patrné, že parametr pro jednu hodnotu pole vypadá následovně

Ids%5B0%5D=N

což mi přijde dost nešikovné, protože, se URL roztáhne zbytečně o %5B KEY %5D při každé hodnotě pole…

zkoušel jsem všechny možné kombinace ale ostatní kombinace vyhazují chybu.
Samozřejmě jsem googlil a prý by mělo jít zapsat Ids=[1,2,3], což je vyhodnoceno jako string ne jako pole.
Ids%5B0%5D=[1,2,3] – nenalezen záznam s id [1,2,3]
Ids%5B0%5D=%5B1,2,3%5D – taky nejde

a tak dále.....

existuje nějaký elegantnější způsob než?
http://localhost/…-objednavek/?…

Díky moc.)

EDIT: Místo zástupných znaků lze použít klasické znaky [ a ] …
tzn lze:

http://localhost/farma/sprava-objednavek/?Ids[0]=1&Ids[1]=2&Ids[2]=3&do=labelPdf

Editoval Newer (9. 4. 2021 21:19)

Newer
Člen | 47
+
0
-

Tenhle přepis jsem zkoušel a nette forms mám linknuty. Wtf (:

Ale dík… mrknu na to 💪

David Grudl
Nette Core | 8133
+
0
-

Tva otazka se tyka formularu? Predpokladam ze ne.

Newer
Člen | 47
+
0
-

@DavidGrudl nn… napsal jsem si jquery script pro checkboxy v tabulce objednávek eshopu, + jeden navíc, takové to to zaškrtnout vše…

A podle toho co je zaškrtle vrací pole id objednávek

To pole chci poslat do handle signálu pro vytvoření pdfka s přehledem adresatu..

Vše mám, jen nevím jak lépe poslat pole z jquery do handle, než jako parametr přes url.

Keeehi
Člen | 36
+
+1
-

Samozřejmě jsem googlil a prý by mělo jít zapsat Ids=[1,2,3], což je vyhodnoceno jako string ne jako pole.
A to je snad problém? Vynechej ty hranaté závorky a v PHP použij explode. A hned máš pole.

nn… napsal jsem si jquery script pro checkboxy
Takže se jedná o formulář. Nebo pokud v nette k tomu ekvivalentní form nemáš, není problém ho dodělat, že? Takže by mělo jít použít i to co posílal @Gappa.

Editoval Keeehi (10. 4. 2021 13:10)

Newer
Člen | 47
+
0
-

@Keeehi

  1. fce explode mě nenapadla, ani nevím proč… měl jsem v sobě pár piv… a striktně typovanou funkci co přijímá pole :-D
  2. řešení formulářem mi přišlo zbytečně moc pracné, když by to šlo lehce přes jquery(1 krátký script) … zasekl jsem se na tom poli v url.

Pořesim to tím explode, to je hned

Dík 👌

CZechBoY
Člen | 3608
+
0
-

vsak udelas form v nem tabulku s radky objednavek, na kazdem radku checkbox
nekde budes mit nejaky javascriptovy tlacitko ktery o(d)skrtne vsechny checkboxy v danem formulari/tabulce
potom muzes provest libovolnou hromadnou akci jakymkoliv submit tlacitkem
v nette udelas klasickej form s checkboxlistem kde kazdy checkbox ma hodnotu id objednavky → pri onSuccess callbacku ti prijde pole id objednavek ktere mely zaskrtnuty checkbox

dakur
Člen | 493
+
0
-

což mi přijde dost nešikovné, protože, se URL roztáhne zbytečně o %5B KEY %5D při každé hodnotě pole…

@Newer Vychází to z HTTP standardu, posílají se tak např. formulářové prvky, které mají stejný název (atribut name). Je to jediný způsob, jak obecně zajistit, že se ty hodnoty správně rozparsují. Pokud bys měl totiž ve value text s čárkou, najednou by ti anotace s čárkou nefungovala:

?Předmět e-mailu,Dobrý den, je mi ctí, nashledanou.
-> očekávám předmět a text zprávy, dostanu ale pole o čtyřech prvcích

proto se to udělalo takto:

?parts[0]=Předmět e-mailu&parts[1]=Dobrý den, je mi ctí, nashledanou.
-> už mám správně pole o dvou prvcích

Pro některé use-casy je ?ids=1,2,3 dostačující a jednoduché, pro jiné budeš muset použít [] variantu.

Editoval dakur (13. 4. 2021 8:52)