Autor Zpráva
JJ
Profil *
Zdravím,
mám toto:

	<?php $text = File ("text.txt");?>
kde první řádek souboru text.txt je:
$text[0] = "<span class=\'trida\'>slovo</span>"


Javascript, kterým zobrazuji text pod obrázkovou mapou:
function writeText(txt) {
	document.getElementById("desc").innerHTML=txt;
}


Část obrázkové mapy:
<area onMouseOver="writeText('<table><tr><td><?php echo $text[0];?></td></tr></table>')" onMouseOut="writeText('')" shape="poly" title="něco" alt="něco" href="#" coords="78,224,312,234,376,233,376,235,612,244,612,197,78,198">


Problém:
Při načtení stránky je správně zdroják:
<area onMouseOver="writeText('<table><tr><td><span class=\'trida\'>slovo</span></td></tr></table>')" onMouseOut="writeText('')" shape="poly" title="něco" alt="něco" href="#" coords="78,224,312,234,376,233,376,235,612,244,612,197,78,198">


ale javascript nefunguje. Ale, když toto:
<span class=\'trida\'>
vložím napíšu přímo - ne prostřednictvím
<?php echo $text[0];?>
vše šlape. Tušíte kudy z toho?

Výsledný zdroják stránky je v obou případech stejný, ale s PHP nešlape :-(
Radek9
Profil
…&lt;/table>')" onMouseOut…
JJ
Profil *
Nevím jestli to dobře chápu, ale pokusil jsem se to přepsat takto:
<area onMouseOver="writeText('&lt;table&gt;&lt;tr &gt;&lt;td&gt;&lt;?php echo $text[0];?&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;')" onMouseOut="writeText('')" shape="poly" title="neco" alt="neco" href="#" coords="78,224,312,234,376,233,376,235,612,244,612,197,78,198">

a stejně nešlape. Předpokládám, že chyba je mezi židlí a klávesnicí...
Radek9
Profil
JJ:
Ne. V tom první kódu máš >, ale má tam být entita.
A proč to nahrazuješ i v PHP kodu? Co to má za smysl?
Chamurappi
Profil
Upozorňuji, že za zobrazení entit v atributech zdejšího kódu může fórum (konkrétně JUSH) — kdo si vypne barvení (nahoře v menu), uvidí, jak to JJ doopravdy napsal.

Reaguji na JJ:
Prosím o odkaz na živou ukázku.


Reaguji na Radka9:
Uvnitř hodnoty atributu uzavřeného uvozovky smí (prakticky) být cokoliv vyjma uvozovek.
JJ
Profil *
To byl jen už jen zoufalý pokus. Vše funguje ať už se znaky <> nebo s entitami, ale jen do chvíle, než do toho vložím
<?php echo $text[0];?>
. Pak to prostě nechodí.
Radek9
Profil
Chamurappi:
Aha, tak to se omlouvám. Já jsem s těmy tagy v atributech měl párkrát problémy, takže jsem byl přesvědčen, že tam mají být entity.
JJ
Profil *
Mám to v rozpracovaném projektu. Připravím to do jedné stránky a hodím odkaz.
JJ
Profil *
Na začátek: ukázku připravuji, ale mezitím jsem zjistil v čem je problém.

Mám soubor *.txt a v něm toto:
<span class=\'pi33\'>A1</span>
<span class=\'pi33\'>B1</span>
<span class=\'pi33\'>C1</span>


Do stránky je načten:
<?php
	$text = File ("imagemaps/text.txt");
?>


Hodnoty - tedy co řádek, to hodnota vypisuji do stránky takto:
<?php echo $text[0];?>
<?php echo $text[1];?>
<?php echo $text[3];?>


Problém je v tom, že pokud je v souboru text.txt více jak jeden řádek, tak se sice daná hodnota do stránky vloží (ve zdrojáku je vše jak má), ale JavaScript to vyřadí z provozu.

Tedy:
- takto to šlape:
<?php echo $text[0];?>


a takto už ne:
<?php echo $text[0];?>
<?php echo $text[1];?>
...
...
...


Kudy z toho?
JJ
Profil *
Oprava:
toto šlape:
<span class=\'pi33\'>A1</span>


<span class=\'pi33\'>A1</span>
<span class=\'pi33\'>B1</span>
<span class=\'pi33\'>C1</span>
...
...
...
Chamurappi
Profil
Reaguji na JJ:
V zápisu JS řetězce nemůžeš mít natvrdo konec řádku.
JJ
Profil *
Nerozumím.
JJ
Profil *
Tak příklad je zde:
http://www.extremeways.cz/test/index.php

viz spodní dvě patra: spodní funguje, to nad ním ne. Proč?

Rozdíl:
www.extremeways.cz/test/imagemaps/text.txt - má tři řádky - nefunguje
www.extremeways.cz/test/imagemaps/text2.txt - má jen jeden řádek - funguje
Enyeus
Profil
Co jsem zjistil z Chrome: "Uncaught SyntaxError: Unexpected token ILLEGAL - index.php:33"
JJ
Profil *
Mě Chrome najde sice jednu chybu, ale nedokáže ji identifikovat. (verze 10.x.x.x dev)
Každopádně pokud nechám texťákách jen jednu řádku - žádné chyby nehlásí. Ani validátor nehlásí nic co by to vysvětlovalo.
Zkusil jsem to načíst i do pole a z něj pak vložit - výsledek stejný. Plánuji to v budoucnu hodit do databáze, ale teď to z časových důvodů nemůžu dělat.
_es
Profil
JJ:
má tři řádky - nefunguje
Chamurappi ti predsa v [#11] vysvetlil prečo.
Ak chceš mať v textovom reťazci v JS koniec riadka použi \n.
JJ
Profil *
Asi mám dlouhé vedení, ale co s tím má konec řádku? Já přeci vkládám jeden řádek textového souboru do zdrojáku pomocí tohoto:
<?php echo $text2[0];?>
kde
	$text = File ("imagemaps/text.txt");

takže chci od PHP vypsat jeden řádek textového souboru (v tomto případě první řádek) takže JS by s obsahem toho textového souboru (vyjma požadovaného řádku) neměl vůbec přijí do styku.

Zdroják je sice toto:
<area onMouseOver="writeText('Nějaký text + kus PHP: <?php echo $text2[0];?>')" onMouseOut="writeText('')" shape="poly" title="idt2" alt="idt2" href="#" coords="78,224,312,234,376,233,376,235,612,244,612,197,78,198">


ale prohlížeč od serveru dostane toto:
<area onMouseOver="writeText('Nějaký text + kus PHP: <a href=\'#\' class=\'pi32\'>A1</a>')" onMouseOut="writeText('')" shape="poly" title="idt2" alt="idt2" href="#" coords="78,224,312,234,376,233,376,235,612,244,612,197,78,198">
_es
Profil
JJ:
viz spodní dvě patra: spodní funguje, to nad ním ne. Proč?
Lebo máš v textovom reťazci, posielanom do funkcie writeText koniec riadka - pred | a ještě PHP. (odkaz v [#13]).
JJ
Profil *
Aha, už jsem doma - sorry mám dlouhé vedení. Takže koncem řádky je míněn skrytý znak, který se do souboru *.txt vloží při stisknutí enter.
Problém je, že já to tam potřebuji -proto, aby data byla na jednotlivých řádcích. A teď se blbě zeptám: kam umístit
\n
?
_es
Profil
JJ:
kam umístit \n?
Tam, kde sa nachádza ten „skrytý“ znak, teda treba nahradiť všetky výskyty konca riadku za \n.
JJ
Profil *
Bohužel v ten okamžik s tím PHP (netuším proč) pracuje jako s jedním řádkem.

Nakonec jsem to vyřešil takto:

$text = explode(',', file_get_contents('imagemaps/text.txt'));


text.txt:
<span class=\'pi33\'>A1</span>,<span class=\'pi33\'>B1</span>,<span class=\'pi33\'>C1</span>


Protože na webu žádné funkční řešení k dispozici není - tak jen pro info (třeba se to někomu hodí a nebo to někdo vylepší):
- řeším klikací obrázkovou mapu s hover efektem, tooltipem do kterého jsou dynamicky vkládána data. V tuto chvíli to řeším pomocí JavaScriptu a vypadá to, že už to mám (předběžně testováno na Win7 - FF3 a dál, Chrome 3 a výše, IE 6-9, Safari 4,5, Opera 9,10) Večer to testnu na Win XP a v dohledné době to kámoš testne na Linuxu).

Po tomto mém řešení se tu na fóru kdysi někdo pídil:
- jinak klikací mapu s hover efektem, tooltipem, dynamicky načítanými daty a hlavně nepravidleným tvarem a to jen PURE CSS mám vyřešenou a otestovanou na Win XP, Vista, 7 - FF1 a dál, IE6-9, Opera 9,10,11, Chrome 1 - 10dev, Safari 3-5 a na Linuxu - FF a protože její vytvoření je docela časově náročné řeším to nyní pomocí JS

(nevím zda se tu smí uvést adresa, aby to nebylo bráno jako reklama - když tak, ať to admin smaže)
Během cca 2 měsíců zprovozním web www.extremeways.cz na kterém dám obě řešení v *.zipu ke stažení vč komentáře.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0