Newbee - Een tabel verdelen in meerder kolommen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roy Janssen

Roy Janssen

31/05/2011 16:30:09
Quote Anchor link
Hallo,

Laat ik me eerst even voorstellen ik ben Roy en heb een probleempje met een PHP script waar ik op de een of andere manier niet uit kom.

Het is een script dat een lijst genereert in Magento, echter is het 1 lange lijst die wordt gegenereerd in een tabel met rijen. Ik zou dit graag opsplitsen in een tabel met 2 kolommen.

Weet iemand of dit mogelijk is?


Dit is het huidige script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26


<?php
    $_helper
= $this->helper('catalog/output');
    $_product = $this->getProduct()
?>

<?php if($_additional = $this->getAdditionalData()): ?>
<div class="box-collateral box-additional innercontent">
    <!-- <h2><?php echo $_product->getName().' '.$this->__('Additional Information') ?></h2> -->
    <table class="data-table2" id="product-attribute-specs-table">
        <col width="50%" />
        <col />
        <tbody>
        <?php foreach ($_additional as $_data): ?>
            <tr>
                <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
                <?php
                ?>

                <td class="data <?php echo strtolower($_data['label']); ?>"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
    <script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
</div>
<?php endif;?>

_____________________
| Naam: | Attribuut|
_____________________

Ik zou graag willen hebben:

________________________________________________
| Naam: | Attribuut | Naam2: | Attribuut2|
| Naam3: | Attribuut | Naam4: | Attribuut2|
| Naam5: | Attribuut | Naam6: | Attribuut2|
| Naam7: | Attribuut | Naam8: | Attribuut2|


Nu heb ik het volgende geprobeerd, echter komt er niet uit wat ik graag zou willen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

"<?php
    $_helper
= $this->helper('catalog/output');
    $_product = $this->getProduct()
?>

<?php if($_additional = $this->getAdditionalData()): ?>

<?php $rows = count($_additional)/2; ?>


<div class="box-collateral box-additional innercontent">
    <!-- <h2><?php echo $_product->getName().' '.$this->__('Additional Information') ?></h2> -->
<table class="data-table2-1" id="product-attribute-specs-table">
    
<?php foreach ($_additional as $_data): ?>
           <tr>
               <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
               <?php
               ?>

               <td class="data <?php echo strtolower($_data['label']); ?>"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
           </tr>
       <?php endforeach; ?>
      
    </table>
    <script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
</div>
<?php endif;?>


Zou iemand mij hier mee op weg kunnen helpen?

Alvast veel dank!

Gr Roy
Gewijzigd op 01/06/2011 09:21:31 door Roy Janssen
 
PHP hulp

PHP hulp

26/11/2020 07:32:29
 
Vincent Huisman

Vincent Huisman

31/05/2011 17:12:11
Quote Anchor link
zet je code even tussen [code] en [/code] tags
 
Erik van de Locht

Erik van de Locht

31/05/2011 19:36:06
Quote Anchor link
Ik heb ook wel eens met zo iets gezeten. Geen idee of ik het toen op de meest praktische manier opgelost had, maar het werkte in elk geval wel.
Wat ik deed was zeg maar zo iets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<table>
    <tr>
        <?php $i = 0; foreach($items as $item) { ?>
        <td>
            <!-- Inhoud kolom hier -->
        </td>
        <?php $i++; if ($i == 2) { echo '</tr><tr>'; $i = 0; }
        }
?>

    </tr>
</table>

Enkel kan het dan voorkomen dat je op het eind een lege <tr> krijgt. Maar daar is vast wel wat op te verzinnen. Als je het aantal resultaten in je database weet, kun je ook daar een tellertje voor maken. Als het aantal records waar hij doorheen heeft gelopen dan gelijk is aan het aantal records wat uit de DB gehaald is, dan moet hij geen nieuwe <tr> maken.

Wellicht wat omslachtig, maar wel functioneel.
Gewijzigd op 31/05/2011 19:37:01 door Erik van de Locht
 
Wouter J

Wouter J

31/05/2011 19:41:10
Quote Anchor link
@erik, je kan in zo'n geval beter gebruik maken van de alternative-syntax voor if/else constructies en for(each)/while loops.
 
Roy Janssen

Roy Janssen

01/06/2011 09:24:15
Quote Anchor link
Ik heb de code tussen tags gezet. Het is nu een stuk duidelijker.

@Erik, denk je dat dit zou werken? Ik denk niet dat dit de juiste weg is, vooral omdat het eigenlijk al 2 kolommen zijn nu. Wat denk jij?

Bedankt voor jullie reacties zover :)
Gewijzigd op 01/06/2011 09:24:51 door Roy Janssen
 
Erik van de Locht

Erik van de Locht

01/06/2011 09:50:14
Quote Anchor link
Ik denk dat het wel werkt, maar ben er niet zeker van dat het de meest praktische oplossing is.

Nu doet mijn voorbeeld zeg maar als volgt:
Voor elke kolom wordt $i met 1 verhoogd. Als $i na het verhogen gelijk is aan 2, wordt de regel afgesloten en maakt hij een nieuwe. Vervolgens wordt $i weer op 0 gezet zodat hij overnieuw kan tellen.
 
Roy Janssen

Roy Janssen

01/06/2011 09:57:59
Quote Anchor link
Erik van de Locht op 01/06/2011 09:50:14:
Ik denk dat het wel werkt, maar ben er niet zeker van dat het de meest praktische oplossing is.

Nu doet mijn voorbeeld zeg maar als volgt:
Voor elke kolom wordt $i met 1 verhoogd. Als $i na het verhogen gelijk is aan 2, wordt de regel afgesloten en maakt hij een nieuwe. Vervolgens wordt $i weer op 0 gezet zodat hij overnieuw kan tellen.



Ja dat is duidelijk ja, dus dan krijg ik dit?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
    $_helper
= $this->helper('catalog/output');
    $_product = $this->getProduct()
?>

<?php if($_additional = $this->getAdditionalData()): ?>
<div class="box-collateral box-additional innercontent">
    <!-- <h2><?php echo $_product->getName().' '.$this->__('Additional Information') ?></h2> -->
    <table>
    <tr>
        <?php $i = 0; foreach($items as $item) { ?>
        <td>
            <!-- Inhoud kolom hier -->
        </td>
        <?php $i++; if ($i == 2) { echo '</tr><tr>'; $i = 0; }
        }
?>

    </tr>
</table>
    <script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
</div>
<?php endif;?>


Nee nu sla ik toch helemaal de spijker mis geloof ik want nnu komt er niets meer uit het script. haha
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.