Autor Zpráva
Lucyk
Profil
Dobrý den,

mám kód se třemi proměnnými
    echo ("<a href=\"stranka.php?$nazev1&$nazev2&$nazev3\">$nazev1 $nazev2 $nazev3</a> &nbsp;&nbsp;&nbsp;");

který mi vypisuje na řádku následující např. zima sport hokej (mezera) zima sport lyzovani (mezera) zima sport brusleni (mezera) leto sport plavani (mezera) leto sport fotbal .... atd.

Marně se snažím udělat to, aby při výpisu toto 3tří slovní spojení, pokud se dojde na konec šířky stránky, tak začínalo automaticky na novém řádku a nebylo rozdělené, např. zima sport (na prvním řádku) a brusleni (už automaticky skáče na řádek druhý, neboť je konec šířky stránky).

A pak ještě pokud se jedná o proměnnou, která obsahuje víceslovný název, tzn. $nazev1=zima $nazev2=sport $nazev3=sjezdove lyzovani, tak v tomto případě dojde také k zalomení, které vypadá následovně zima sport sjezdove (první řádek) a lyzovani (druhý řádek).

Zkoušela jsem použít např. <td><tr> ... </td></tr> aby to bylo v buňce, ale to mi nefunguje, anebo jsem to asi dávala špatně.
Pak jsem hledala možnost pevného spojení těchto tří proměnných, ale nevím, jestli to nějak jde?

Napadá prosím někoho, jak by se dalo tohle vyřešit, aby pokud odkaz dojde na konec stránky a ještě jeho 3tří slovní spojení pokračovalo, aby automaticky začal na řádku novém?

Děkuji
Tomášeek
Profil
Lucyk:
Vlož mezi jednotlivá slova nedělitelnou mezeru. Evidentně ji znáš, ale používáš ji tam, kde být nemá (padding/margin). Tam, kam patří, ji však nedáváš.
pcmanik
Profil
Lucyk:
echo '<a href="stranka.php?'. rawurlencode($nazev1) .'&'. rawurlencode($nazev2) .'&'. rawurlencode($nazev3) .'">'. $nazev1 .'&nbsp;'. $nazev2 .'&nbsp;'. $nazev3 .'</a>';
Lucyk
Profil
Tomášeek a pcmanik:
Děkuji, zkusila jsem variantu

echo ("<a href=\"stranka.php?$nazev1&$nazev2&$nazev3\">$nazev1&nbsp;$nazev2&nbsp;$nazev3</a> &nbsp;&nbsp;");

a i druhou uvedenou a už jsem poznala změnu, nicméně ještě jeden dotaz, který na to navazuje, ale to už si nejsem jistá, zda to jde nějak ošetřit?

např. parametr $nazev3 bude obsahovat slovní spojení 3 slov a pokud se narazí na konec stránky, tak automaticky dojde k zalomení této proměnné a pokračuje výpis na druhém řádku

Správně by měl vypsat na jednom řádku -> zima ($nazev1) sport ($nazev2) ledni hokej ($nazev3), ale jelikož jde o konec (kraj) stránky, tak dojde k jeho zalomení a vypíše -> zima ($nazev1) sport ($nazev2) ledni <- na prvním řádku a slovo hokej (které je součástí $nazev3), tak vypíše na řádku druhém.

Existuje i na tohle nějaký kód, který by např. automaticky vlož do proměnné pevnou mezeru mezi slovy? V proměnné ($nazev3) mám i třeba sousloví ze 3tří, 4, 5ti slov ...

Děkuji
Bubák
Profil
Jinou možností je obalit sousloví spanem a deklarovat mu v CSS whitespace: nowrap;
pcmanik
Profil
Lucyk:
Nepoužívaj nedeliteľné medzery na odsadenie obsahu. Na to slúži padding a margin.

V mojom kóde som ti ošetril premenné ktoré dávaš do url adresy odkazu. Aj keď si teraz môžeš byť na 100% istá že tam žiadny zlý znak nebude. Nieje dôvod to neošetriť.

Echo nieje funkcia, ale je to jazykový konštruktor. Síce umožňuje používanie zátvoriek ako klasická funkcia. Ale je bežným štandartom ich nepísať. Naviac ušetríš dve stlačenia klávesnice.
Lucyk
Profil
Bubák:
Tato možnost funguje, ale všechno mám pak na jednom řádku a místo toho, aby pokračovalo nové sousloví (nové $nazev1 $nazev2 $nazev3) na novém řádku, tak se objevil posuvník.


pcmanik:
Ano, ale když jsem použila Tvou verzi, tak se to objevuje sice bez posuvníku, ale odděluje to dvousloví, které obsahuje samotná proměnná.

Správně by měl vypsat na jednom řádku -> zima ($nazev1) sport ($nazev2) ledni hokej ($nazev3), ale jelikož jde o konec (kraj) stránky, tak dojde k jeho zalomení a vypíše na prvním řádku -> zima ($nazev1) sport ($nazev2) ledni <- a slovo hokej (které je součástí $nazev3), tak vypíše na řádku druhém. A proměnná $nazev3 obsahuje "ledni hokej".
pcmanik
Profil
Lucyk:
Môžeš prosím napísať príklad s tromi slovnými spojeniami ako sa to má zalamovať? Nie som si na 100% istý čo vlastne chceš. Ale ak to správne chápem podľa posledného tvojho príspevku tak chceš aby celé spojenie "ledni hokej" bolo už na druhom riadku áno?

V tom prípade to uprav takto: Deklarácia CSS samozrejme patrí do CSS súboru.
span { display: inline-block; }
echo '<a href="stranka.php?'. rawurlencode($nazev1) .'&'. rawurlencode($nazev2) .'&'. rawurlencode($nazev3) .'"><span>'. $nazev1 .'</span><span>'. $nazev2 .'</span><span>'. $nazev3 .'</span></a>';
Lucyk
Profil
pcmanik:
Udělala jsem přes malování názorný příklad, jde mi o zobrazení všech 3 proměnných na jednom řádku, pokud se narazí na konec stránky tak, aby nedošlo k jejich rozdělení ať už proměnná 1 a proměnná 2 na jednom řádku a proměnná 3 na řádku druhém, anebo proměnná 1, proměnná 2 a část proměnné 3 na jednom řádku a zbytek proměnné 3 na řádku druhém.

Keeehi
Profil
echo '<a href="stranka.php?'.rawurlencode($nazev1).'&'.rawurlencode($nazev2).'&'.rawurlencode($nazev3).'">'.preg_replace('~\s+~', '&nbsp;', $nazev1).'&nbsp;'.preg_replace('~\s+~', '&nbsp;', $nazev2).'&nbsp;'.preg_replace('~\s+~', '&nbsp;', $nazev3).'</a>';
Lucyk
Profil
Keeehi:
Děkuji, tento kód už plní účel, kterého jsem se snažila dosáhnout.

Ještě jsem narazila na jeden zádrhel. Pokud mám v proměnné číselné záznamy typu: 2001-02, 2002-03, tak mi to nyní pokud se narazí na konec stránky rozdělí 2001-(první řádek) 02 (řádek druhý). Přestože mezi číslem a pomlčkou není mezera.

Existuje i na tohle nějaký trik, jak to ošetřit, aby to zůstalo spojené?
Tomášeek
Profil
Lucyk:
Předpokládám, že tě nenapadlo nejprve hledat, že? Pojem nedělitelná mezera znáš, první, co tě mělo napadnout, je nedělitelná pomlčka - Interpunkce na webu
Lucyk
Profil
Tomášeek:
Hledala jsem a zkoušela jsem použít do této části kódu ('~\s+~', '&nbsp;', $nazev2), aby pomlčka byla nahrazena nedělitelnou mezerou.

Podařilo se mi dosáhnout toho, že mi pomlčka zmizela a je tam mezera.

('~[\-\s+]~', '&nbsp;', $nazev2)
Keeehi
Profil
('~-~', '‑', $nazev2)
Lucyk
Profil
Keeehi:
Tak jsem to zatím vyřešila následujícím kódem.

('~[\-]~', '‑', $nazev2)

Jelikož se jedná pouze o jednu proměnnou, kde vím, že nebude mezera, ale pomlčka, tak jsem dala nahradit pomlčku nedělitelnou pomlčkou.

Btw. jaký je rozdíl mezi '~[\-]~' a ~-~ .

Ale ráda bych to měla i ošetřené pro situace, kdy bych měla např. v proměnné následující řetězec "2003-05 Auto". Zde už musí být provedeno dvojí nahrazení. Pomlčka -> nedělitelná pomlčka a Mezera -> nedělitelná mezera.

Zkoušela jsem se dívat na internetu, zda nenajdu nějaký příklad použití pro vícenásobné použití preg_replace.

Našla jsem něco takového, ale nevím, zda je to správně zapsáno:
preg_replace('/\s+/', '&nbsp;', preg_replace('~[\-]~', '‑', $nazev2))

Tento zápis chápu tak, že v proměnné by se nahradily mezery -> nedělitelnou mezerou a následně by pomlčky nahradily pevnou pomlčkou. Nebo se zápis pro takovéto případy dělá jiným způsobem?
Keeehi
Profil
Lucyk:
Tento zápis chápu tak, že v proměnné by se nahradily mezery -> nedělitelnou mezerou a následně by pomlčky nahradily pevnou pomlčkou.
Pořadí je naopak, ale jinak je to správně. Vyhodnocuje se to zevnitř ven.

Btw. jaký je rozdíl mezi '~[\-]~' a ~-~ .
V tomto případě naprosto žádný. To zpětné lomítko tam je zbytečné. A ty hranaté závorky označují skupinu z které se "vybírá" jeden prvek. Když ta skupina má jeden prvek tak je jasné že je nutné použít zrovna ten.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: