Daten vergleichen und bei Übereinstimmung nur einmal anzeigen

frankys9

Mitglied
Hallo Leute,

da ich mich noch nicht wirklich gut mit PHP auskenne bräuchte ich mal etwas Hilfe.

Ich habe eine Datei in der folgende Daten ausgegeben werden:

- Name
- Kurzbeschreibung
- Bild

Das ganze geht über eine DB Abfrage in ein Array und wird dann über eine Templatedatei ausgegeben.

Ich würde nun gern über eine Funktion (oder auch mehrere Funktionen) die Inhalte miteinander vergleichen und bei übereinstimmung nur einmal anzeigen lassen.

Soll heißen wenn Name = Name und Kurzbeschreibung = Kurzbeschreibung und Bild = Bild dann soll der Datensatz nur einmal angezeigt werden.

Könnt ihr mir vielleicht sagen welche Funktionen ich dazu benötige oder habt ihr vielleicht Code Schnipsel, Links etc. die mir weiterhalfen können?

Vielen Dank
 
Hallo Gumbo, hallo tobee,

vielen dank für die schnelle Hilfe.

Die Lösung ist dann für mich leider nicht ganz so leicht.

Es handelt sich bei den Daten um Datensätze aus einem XTCommerce Shopsystem. Da die DB Abfragen sich über mehrere Dateinen erstrecken und in anderen Dateinen dann zusammengebaut werden gestaltet sich das ganze etwas schwierig.


Die Daten kommen in der Form an:

PHP:
{foreach name=aussen item=module_data from=$module_content}
<dl class="preview">
    <dd>
        {if $module_data.PRODUCTS_IMAGE!=''}
            <a href="{$module_data.PRODUCTS_LINK}">
                <img src="{$module_data.PRODUCTS_IMAGE}" alt="{$module_data.PRODUCTS_NAME}" />
            </a>
        {/if}
        <p class="shortdescreption">
            <strong>{$module_data.PRODUCTS_NAME}</strong><br />
            {$module_data.PRODUCTS_SHORT_DESCRIPTION|strip_tags|truncate:55:"...":true}<br />
            ab {$module_data.PRODUCTS_PRICE}<br />
        </p>
    </dd>
    <dd>
        <span>{$module_data.BUTTON_BUY_NOW}</span>
        <a href="{$module_data.PRODUCTS_LINK}" class="productlink">Details</a>
    </dd>
</dl>
{/foreach}

Ansich sollte es doch auch in der Datei möglich sein die Daten zu vergleichen Der Link sollte dann auch ausreichend sein.

Habt ihr da vielleicht einen Lösungsansatz für mich

Danke
 
Hallo,

Deine Ausgabe ist nur ein Template.

Die {foreach name=aussen item=module_data from=$module_content}
ist eine Anweisung an das Template System, diesen Block für jeden Eintrag im Array $module_content zu wiederholen.

Solange du alos die Einträge doppelt ion $module_content stehen hast kannst du gar nichts machen, ausser die Query selber zu ändern die $module_content füllt bevor das Template aufgerufen wird.

Falls du "ordentlichen" PHP code in dem Template ausführen kannst, kannst du auch mit PHP das Array nachträglich manipulieren.

Ansonsten such die Query raus und verwende entweder Distinct, oder group by name_FELD, Kurzbeschreibung_FELD, bild_FELD, wenn dann alle 3 Felder übereinstimmen, dann gibt er dir auch nur eins zurück.

Gruß

Marcus
 
Das habe ich auch schon gemacht und da ich dort keine Hilfe bekommen habe dachte ich das ich hier vielleicht mehr glück habe.

Mir geht es nicht mal um Smarty Funktionen oder der gleichen. Mir genügt es schon wenn ich weiss wie ich Daten in einer Schleife vergleichen kann oder irgend ein Lösungsansatz mit dem ich arbeiten kann.

Ich habe schon an Vergleichsoperatoren gedacht, weiss aber nicht wie ich sie in eine Schleife einbauen kann.

Vielleicht habt ihr ja doch irgend einen Lösungsansatz für mich.

Danke
Frank
 
Hallo Markus,

es ist möglich innerhalb der Templatedatei php Code anzuwenden. Das währe mir auch lieber, da sich das layout vielleicht noch einmal grundlegend ändern soll und ich somit nicht in den org. XTC Code eingreifen müsste.

Welche Funktionen muss ich einsetzen um das Array entsprechend zu manipulieren? Kannst du mir vielleicht ein Paar Tipps geben?

Danke
 
Versuch mal:

$module_content = array_unique($module_content);

Wenn nötig mach <?php und ?> drumherum.

Gruß

Marcus
 
Hallo,

ich habe jetzt alles soweit ich konnte umgebaut:

PHP:
{php}

$data = $this->_tpl_vars['module_content'];
$module_data = ($data);

foreach ($module_data as $module_content)
{
    echo "<dl class='preview'><dd>";
    if ($module_content.PRODUCTS_IMAGE!='')
    {
        echo "<a href='".$module_data."'><img src='$module_content.PRODUCTS_IMAGE' alt='$module_content.PRODUCTS_NAME' /></a>";
    }
    echo "<p class='shortdescreption'><strong>$module_content.PRODUCTS_NAME</strong><br />$module_data.PRODUCTS_DESCRIPTION|strip_tags|truncate:55:'...':true<br />ab $module_data.PRODUCTS_PRICE<br /></p></dd><dd><span>$module_data.BUTTON_BUY_NOW</span><a href='$module_data.PRODUCTS_LINK' class='productlink'>Details</a></dd></dl>";
}

echo '<pre style="float:left;">';
print_r($module_data);
echo '</pre>';
{/php}
Noch funktioniert es nicht aber ich denke und hoffe, dass ich auf dem richtigen Weg bin.
Ich benötige aller dings immernoch eure Hilfe und hoffe mal das ihr mir noch weiter helfen werdet.

Über "print_r" habe ich mir den Inhalt meines arrays anzeigen lassen:

Array
(
[0] => Array
(
[PRODUCTS_NAME] => fgtjjlh
[PRODUCTS_DESCRIPTION] => hier kommt der laaaaange text rein
[PRODUCTS_PRICE] => 657,00 EUR
[PRODUCTS_TAX_INFO] =>
[PRODUCTS_SHIPPING_LINK] =>
[PRODUCTS_LINK] => http://localhost/projekte/australien-pur/xtcommerce_304/product_info.php/info/p8_fgtjjlh.html
[PRODUCTS_IMAGE] => images/product_images/thumbnail_images/8_0.jpeg
[BUTTON_BUY_NOW] => Merken
)

[1] => Array
(
[PRODUCTS_NAME] => fgtjjlh
[PRODUCTS_DESCRIPTION] => hier kommt der laaaaange text rein
[PRODUCTS_PRICE] => 657,00 EUR
[PRODUCTS_TAX_INFO] =>
[PRODUCTS_SHIPPING_LINK] =>
[PRODUCTS_LINK] => http://localhost/projekte/australien-pur/xtcommerce_304/product_info.php/info/p8_fgtjjlh.html
[PRODUCTS_IMAGE] => images/product_images/thumbnail_images/8_0.jpeg
[BUTTON_BUY_NOW] => Merken
)

....snip....

[9] => Array
(
[PRODUCTS_NAME] => Australien Mosaik
[PRODUCTS_DESCRIPTION] => hier kommt die beschreibung
[PRODUCTS_PRICE] => 1.200,00 EUR
[PRODUCTS_TAX_INFO] =>
[PRODUCTS_SHIPPING_LINK] =>
[PRODUCTS_LINK] => http://localhost/projekte/australie...oduct_info.php/info/p1_Australien-Mosaik.html
[PRODUCTS_IMAGE] => images/product_images/thumbnail_images/1_0.jpg
[BUTTON_BUY_NOW] => Merken
)

)

Hierbei handelt es sich doch um Arrays in einem Array, richtig?
Wie kann ich nun die Elemente der "Unter"-Arrays ansprechen und wie kann ich den Befehl array_unique dort anwenden?

Vielen Dank
 

Neue Beiträge

Zurück