Autor Zpráva
T-fon
Profil
poprosil bych o radu s tímto problémem: vytvořil jsem si funkci: kalendar($mesic,$rok), která mi zobrazí tabulku kde v prvním sloupci mám název dnů a vedle datumy, prostě klasický kalendář. chtěl bych na stránce zobrazit vždy 3 měsíce vedle sebe, tak jsem ty funkce zkusil vložit do tabulky takto:
echo '<table>';
echo '<tr>'.'<td>'.kalendar(1,2012).'</td>'.'<td>'.kalendar(2,2012).'</td>'.'<td>'.kalendar(3,2012).'</td>'.'</tr>';
echo '</table>';
ale kalendáře se mi vykreslují pod sebe a ne vedle sebe jak bych chtěl. je možné, že se funkce nedá takto vkládat do tabulky? je nějaké jiné řešení?
Keeehi
Profil
T-fon:
Jaký je výsledný vygenerovaný html kód?

U všech tabulek si zobrazte rámeček a třeba to uvidíte.
T-fon
Profil
ten vygenerovaný kód zjistím přes "zobrazit zdroj"? pak by to bylo tohle:
<table>
    <table class="kalen">
        <caption>LEDEN&nbsp&nbsp&nbsp2012
        </caption>
        <tr>
            <td id="dny">PO<td></td><td>2</td><td>9</td><td>16</td><td>23</td><td>30</td>
        </tr>
        <tr>
            <td id="dny">ÚT<td></td><td>3</td><td>10</td><td>17</td><td>24</td><td>31</td>
        </tr>
        <tr>
            <td id="dny">ST<td></td><td>4</td><td>11</td><td>18</td><td>25</td>
        </tr>
        <tr>
            <td id="dny">ČT<td></td><td>5</td><td>12</td><td>19</td><td>26</td>
        </tr>
        <tr>
            <td id="dny">PÁ<td></td><td>6</td><td>13</td><td>20</td><td>27</td>
        </tr>
        <tr>
            <td id="dny">SO<td></td><td>7</td><td>14</td><td>21</td><td>28</td>
        </tr>
        <tr>
            <td id="dny">NE<td>1</td><td>8</td><td>15</td><td>22</td><td>29</td>
        </tr>
    </table>
    <table class="kalen">
        <caption>ÚNOR&nbsp&nbsp&nbsp2012
        </caption>
        <tr>
            <td id="dny">PO<td></td><td>6</td><td>13</td><td>20</td><td>27</td>
        </tr>
        <tr>
            <td id="dny">ÚT<td></td><td>7</td><td>14</td><td>21</td><td>28</td>
        </tr>
        <tr>
            <td id="dny">ST<td>1</td><td>8</td><td>15</td><td>22</td><td>29</td>
        </tr>
        <tr>
            <td id="dny">ČT<td>2</td><td>9</td><td>16</td><td>23</td>
        </tr>
        <tr>
            <td id="dny">PÁ<td>3</td><td>10</td><td>17</td><td>24</td>
        </tr>
        <tr>
            <td id="dny">SO<td>4</td><td>11</td><td>18</td><td>25</td>
        </tr>
        <tr>
            <td id="dny">NE<td>5</td><td>12</td><td>19</td><td>26</td>
        </tr>
    </table>
    ....
    <tr><td></td><td></td><td></td>
    </tr>
</table>

Moderátor panther: Zkráceno a zformátováno.
panther
Profil
T-fon:
buď tak laskav a příště ten kód aspoň trochu naformátuj a zkrať na nezbytné minimum.

Celou tu tabulku z [#1] vyhoď, je zavolej 3x za sebou tu funkci a do CSS přidej .kalen {float: left}
T-fon
Profil
za to formátování se omlouvám. ten float jsem zkoušel, ale jak to udělat, aby další 3 měsíce byly zase vedle sebe, ale pod těma prvníma třema? zkoušel jsem div, do něj dát 3 funkce a pak další div, ale to nefungovalo...
panther
Profil
T-fon:
div {overflow: hidden}
div table {float: left}
Pokud budou každé 3 tabulky v jednom divu.
Keeehi
Profil
Tabulky měsíců mají na každém řádku jiný počet buněk.
Jedno id máš u více tagů. Změň id na class a v css #dny na .dny.
Jestli jsi si všiml, tak ty tabulky měsíců nejsou uvnitř <td> obalové tabulky. Proč? Protože funkce kalendar() nevrací tabulku měsíců jako řetězec, ale rovnou ji vypisuje. Pokud by jsi to chtěl změnit, tak na začátek funkce přidat $out = "";, na konec return $out; a uvnitř každé echo nahradit $out .=

Ale dá se to udělat i bez té obalové tabulky jak píše panther.
T-fon
Profil
to panther: díky, takhle to funguje, našel jsem si overflow na JPW, ale stejně mi nějak nedochází, proč to tak je...
to Keehi:
1. maj jiný počet, kvůli tomu jak to vyjde podle počtu dnů, myslel jsem že by to nemuselo vadit
2. to id mám vlastně jen 1x, ale v cyklu for. Já jsem trochu experimentoval, když jsem tam mel class, tak mi to nefungovalo a buňky si přebíraly vlastnost z jiné class, ale to tam mám někde chybu, zkusim jí najít
3. měsíce nemám v td, ale v caption, to jsem se dočet, že se používá jako hlavička tabulky. s tím $out to vyzkoušim
nevíte proč mi Mozila nezobrazuje &nbsp jako mezeru, ale jako tenhle řetězec? ostatní prohlížeče v pohodě
panther
Profil
T-fon:
ale stejně mi nějak nedochází, proč to tak je...
div má uvnitř samé floatované prvky (3 tabulky), které mají nulovou výšku (z podstaty float). Plavání se musí nějak ukončit, jeden způsob je tento, druhý popsla Pixy.

nevíte proč mi Mozila nezobrazuje &nbsp jako mezeru
entity se ukončují středníkem - &nbsp;
Keeehi
Profil
T-fon:
id si měj v php kolikrát chceš, tam je to jedno, ale ve vygenerovaném html musí být každé id originální. To že to funguje víceméně správně i když id unikátní není je věc vedlejší.
T-fon
Profil
Keeehi:
Pokud by jsi to chtěl změnit, tak na začátek funkce přidat $out = "";, na konec return $out; a uvnitř každé echo nahradit $out .=
vyzkoušel jsem tento způsob a funguje v pohodě, jen je zvláštní, že v IE do verze 7 se teď nezobrazuje diakritika u měsíců a dnů, které tahám do buněk z pole. já jsem tohle zatím nepoužíval, znamená to teda, že do jedné obyčejné proměnné můžu takhle vložit celou tabulku i ručně, ne jen v rámci funkce?

Jedno id máš u více tagů. Změň id na class a v css #dny na .dny
já jsem si vzpoměl, že jsem někde čet, že se daj třídy i vnořovat, bohužel to nemůžu najít. zkusil jsem to takto:
<table class="kalendar">
a v CSS si naformátuju buňky .kalendar td {.... (když napíšu td.kalendar, tak to nefunguje)
a pak v tý tabulce mám pár buněk, které chci naformátovat jinak, tak jsem napsal:
<td class="kalendar dny">
a v CSS .kalendar td.dny {....
je něco takového možné?
panther
Profil
T-fon:
buňka v <table class="kalendar"> je .kalendar td
td.kalendar je pro zápis v HTML <td class=kalendar>
<td class="kalendar dny"> pro toto se vztahuje .kalendar, .dny, td.kalendar, td.dny a .kalendar.dny (toto neumí IE6, vezme jen jednu třídu)

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: