Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 07. Februar 2011 17:21

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

cataloger: Nur ausgefüllte Variablen anzeigen

Ich habe ein Template für Cataloger 0.9 erstellt:

[== php ==]
<p>
<strong>{$marke} {$modell}</strong><br />
Baujahr {$erstzulassung}, {$preis}
</p>
<p>&nbsp;</p>
<div class="catalog_item">
<table>
<tr>
<td class="cat_bild"><img id="item_image" name="item_image"  src="{$image_1_url}" title="{$title}" alt="{$title}" /></td>
</tr>
<tr>
<td class="cat_thumbs">{section name=ind loop=$image_url_array}
<a href="javascript:repl('{$image_url_array[ind]}')" class="legal"><img src="{$image_thumb_url_array[ind]}" class="cat_thumbs_gfx" border="0" title="{$title}" alt="{$title}" /></a>
{/section}</td>
</tr>
</table>

<table>
{section name=at loop=$attrlist}
<tr>
<td class="kat_links">
<strong>{$attrlist[at].name}</strong>:
</td>
<td class="kat_rechts">
{eval var=$attrlist[at].key}
</td>
</tr>
{/section}
</table>

{literal}
<script type="text/javascript">
function repl(img)
   {
   document.item_image.src=img;
   }
</script>
{/literal}
</div>

Ich möchte das nur die ausgefüllten Variablen, bzw. Einträge angezeigt werden.

Ich habe eine ähnliche Frage im .org Forum gefunden: Using template variables to change page [solved], beantwortet von Cyberman, ist allerdings von 2008, ich bin mir nicht sicher ob das so noch umsetzbar ist?

Offline

#2 08. Februar 2011 08:42

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Sollte wie dort dargestellt funktionieren, also zum Beispiel

{if $preis != ''}
  {$preis}
{/if}

Offline

#3 08. Februar 2011 09:58

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Danke, ich habe es mit wenigen Einträgen einmal probiert, bekomme aber nur eine Fehlermeldung als Ausgabe:

Fatal error: Cannot use string offset as an array in /is/htdocs/wp170815_QZI30KO90Z/www/tmp/templates_c/Cataloger^%%F0^F02^F02E6036%%module_db_tpl%3ACataloger%3Bcatalog_6.php on line 82

Ich möchte erreichen das bei fehlender Eingabe das gesamte tr nicht angezeigt wird, {$attrlist[at].name} und {eval var=$attrlist[at].key}.

<table>
{section name=at loop=$attrlist}

{if $erstzulassung != ''}
<tr>
<td class="kat_links"><strong>{$erstzulassung[at].name}</strong>:</td>
<td class="kat_rechts">{$erstzulassung}</td>
</tr>
{/if}

{if $leistung != ''}
<tr>
<td class="kat_links"><strong>{$leistung[at].name}</strong>:</td>
<td class="kat_rechts">{$leistung}</td>
</tr>
{/if}

{if $getriebe != ''}
<tr>
<td class="kat_links"><strong>{$getriebe[at].name}</strong>:</td>
<td class="kat_rechts">{$getriebe}</td>
</tr>
{/if}

{if $kraftstoffart != ''}
<tr>
<td class="kat_links"><strong>{$kraftstoffart[at].name}</strong>:</td>
<td class="kat_rechts">{$kraftstoffart}</td>
</tr>
{/if}

{if $nchsterhutermin != ''}
<tr>
<td class="kat_links"><strong>{$nchsterhutermin[at].name}</strong>:</td>
<td class="kat_rechts">{$nchsterhutermin}</td>
</tr>
{/if}

{if $anzahlderfahrzeughalter != ''}
<tr>
<td class="kat_links"><strong>{$anzahlderfahrzeughalter[at].name}</strong>:</td>
<td class="kat_rechts">{$anzahlderfahrzeughalter}</td>
</tr>
{/if}

{/section}
</table>

Im Original werden alle Einträge über {$attrlist[at].name} und {eval var=$attrlist[at].key}

<table>
{section name=at loop=$attrlist}
<tr>
<td class="kat_links">
<strong>{$attrlist[at].name}</strong>:
</td>
<td class="kat_rechts">
{eval var=$attrlist[at].key}
</td>
</tr>
{/section}
</table>

aufgebaut. Um zu verhindern, dass einzelne nicht ausgefüllte nicht angezeigt werden, muss ich doch wie o.a. jede Variable einzeln aufführen? Habe ich das richtig verstanden?
Ist der Eintrag
{section name=at loop=$attrlist}
bei mir richtig positioniert, überhaupt notwendig?

Offline

#4 08. Februar 2011 13:33

piratos
Gast

Re: cataloger: Nur ausgefüllte Variablen anzeigen

{if isset($erstzulassung) and  !empty($erstzulassung[at].name )}

Allerdings kann ich nicht sehen wo $erstzulassung herkommt.

$erstzulassung muss ja ein array sein und deswegen geht auch {$erstzulassung} nicht.

#5 08. Februar 2011 14:20

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

piratos schrieb:

{if isset($erstzulassung) and  !empty($erstzulassung[at].name )}

Allerdings kann ich nicht sehen wo $erstzulassung herkommt.

$erstzulassung muss ja ein array sein und deswegen geht auch {$erstzulassung} nicht.

Also geht's doch nicht?
Dann müssen die Leereinträge halt stehen bleiben sad - schade.

Offline

#6 08. Februar 2011 14:23

piratos
Gast

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Was macht das:

{if isset($erstzulassung) and  !empty($erstzulassung[at].name )}

stellt fest ob es eine $erstzulassung gibt und dann ob empty($erstzulassung[at].name  nicht leer ist.

Trifft beides zu läuft der Rest durch ansonsten nicht.

Allerdings müsste man klären wo die $erstzulassung herkommt.

Solche Abfragen

{if $preis != ''}
  {$preis}
{/if}

funktionieren unter Smarty 2 problemlos, sollte man aber nicht mehr machen, führt unter Smarty 3 sofort zum Abpfiff wenn $preis nicht existiert.

{if !empty($preis)}
  {$preis}
{/if}

w#re besser.

Beitrag geändert von piratos (08. Februar 2011 14:25)

#7 08. Februar 2011 15:13

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

piratos schrieb:

Was macht das:

{if isset($erstzulassung) and  !empty($erstzulassung[at].name )}

stellt fest ob es eine $erstzulassung gibt und dann ob empty($erstzulassung[at].name  nicht leer ist.

Trifft beides zu läuft der Rest durch ansonsten nicht.

Allerdings müsste man klären wo die $erstzulassung herkommt.

Die Variablen stehen unten in
>Erweiterungen >Katalog >Katalog-Untertemplates >entspr. Template anklicken
aufgelistet:
Variablen des Eintrags-Templates
{$title}, {$notes}, {$marke}, {$modell}, {$erstzulassung}, {$leistung},..

Wenn ich bei Benutzerdefinierte Eigenschaften verwalten unter Eigenschaften des Eintrags ein Wort (Nächster HU Termin) mit Umlaut eingebe sieht der Variablenname so aus: {$nchsterhutermin} und funktioniert natürlich nicht. Gibt es vielleicht eine Lösung die eine Anzeige mit Umlaut beibehält?


piratos schrieb:

Solche Abfragen

{if $preis != ''}
  {$preis}
{/if}

funktionieren unter Smarty 2 problemlos, sollte man aber nicht mehr machen, führt unter Smarty 3 sofort zum Abpfiff wenn $preis nicht existiert.

{if !empty($preis)}
  {$preis}
{/if}

w#re besser.

Ich habe das so ins Template gebaut:

<table>
{section name=at loop=$attrlist}

{if !empty($erstzulassung)}
<tr>
<td class="kat_links"><strong>{$erstzulassung[at].name}</strong>:</td>
<td class="kat_rechts">{$erstzulassung}</td>
</tr>
{/if}

{/section}
</table>

bekomme aber weiterhin die gleiche Fehlermeldung. Ist mein Template-Aufbau vielleicht nicht richtig???

Offline

#8 08. Februar 2011 15:18

piratos
Gast

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Also dann nochmals die Fragestellung wo $erstzulassung her kommt.

Die Schleife läuft auf
section name=at loop=$attrlist}

und
nicht auf $erstzulassung.

Also wo kommt das an dieser Stelle her ?
Praktisch gesehen gibt es sie überhaupt nicht.

#9 08. Februar 2011 18:29

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

piratos schrieb:

Also dann nochmals die Fragestellung wo $erstzulassung her kommt.

Die Schleife läuft auf
section name=at loop=$attrlist}

und
nicht auf $erstzulassung.

Also wo kommt das an dieser Stelle her ?
Praktisch gesehen gibt es sie überhaupt nicht.

Soll heißen, das section muss vor jeder Variable / Loop stehen? Ich hatte gehofft es funtioniert übergreifend. Sorry, aber ich habe keine php-Erfahrung, deshalb ist es für mich nicht so einfach alles zu verstehen - und umzusetzen.

Ich habe das jetzt mal so probiert:

<table>

{section name=at loop=$erstzulassung}
{if !empty($erstzulassung)}
<tr>
<td class="kat_links"><strong>{$erstzulassung[at].name}</strong>:</td>
<td class="kat_rechts">{$erstzulassung}</td>
</tr>
{/if}
{/section}

{section name=at loop=$leistung}
{if !empty($leistung)}
<tr>
<td class="kat_links"><strong>{$leistung[at].name}</strong>:</td>
<td class="kat_rechts">{$leistung}</td>
</tr>
{/if}
{/section}
u.s.w...

Die Fehlermeldung ist jetzt eine andere, oder verweist auf eine andere Zeile:
Fatal error: Cannot use string offset as an array in /is/htdocs/wp170815_QZI30KO90Z/www/tmp/templates_c/Cataloger^%%60^609^60917DA7%%module_db_tpl%3ACataloger%3Bcatalog_9.php on line 116

So wie ich's gemacht habe ist es wieder falsch, grmpfff…

Offline

#10 08. Februar 2011 19:22

piratos
Gast

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Das ist nicht PHP das ist Smarty.

Du rubbelst auf der falschen Variable rum.

{get_template_vars}

als erstes ins Template eingeben.

Dann siehst du alle Variable von Smarty.

#11 08. Februar 2011 20:01

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

piratos schrieb:

Das ist nicht PHP das ist Smarty.

Du rubbelst auf der falschen Variable rum.

{get_template_vars}

als erstes ins Template eingeben.

Dann siehst du alle Variable von Smarty.

Angezeigt wir das:

SCRIPT_NAME = /index.php
app_name = CMS
sitename = Meier
lang = de_DE
encoding = utf-8
content_obj = Object
content_id = 70
page = gebrauchtwagen
page_id = gebrauchtwagen
page_name = gebrauchtwagen
page_alias = gebrauchtwagen
position = 4.1.1
friendly_position = 4.1.1

Variablen des Kataloges kann ich keine entdecken. Hilft das irgendwie weiter?

Offline

#12 08. Februar 2011 20:20

piratos
Gast

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Variablen des Kataloges kann ich keine entdecken. Hilft das irgendwie weiter?

Klar - jetzt wissen wir das das wir die Templatebaustelle zunächst einmal zur Seite legen können, wo nichts ist wird nichts ausgegeben.

Ich gehe davon aus das du das so gemacht hast:
{get_template_vars}
<table>

{section name=at loop=$erstzulassung}

Da ich mit dem Modul nicht arbeite  sind nun ANDERE gefordert.

#13 08. Februar 2011 21:59

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

piratos schrieb:

Ich gehe davon aus das du das so gemacht hast:
{get_template_vars}
<table>
{section name=at loop=$erstzulassung}
Da ich mit dem Modul nicht arbeite  sind nun ANDERE gefordert.

Danke das Du's zumindest entschlüsselt hast. So kann ich mir wenigstens weitere Arbeit am Template sparen.

Beitrag geändert von dylan (08. Februar 2011 22:00)

Offline

#14 09. Februar 2011 08:20

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Das sind noch nicht alle Daten - versuch mal diesen Tag

http://www.cmsmadesimple.de/forum/viewtopic.php?id=337

Offline

#15 09. Februar 2011 16:49

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.436

Re: cataloger: Nur ausgefüllte Variablen anzeigen

dylan schrieb:

Ich möchte das nur die ausgefüllten Variablen, bzw. Einträge angezeigt werden.

Okay, jetzt mal bitte etwas mehr Klartext. Um welche Variablen genau geht es?
Um alle?
Oder nur um bestimmte Attribute?
Zeig doch mal ein oder zwei Beispiele.
(Wie es ist und wie es sein soll)


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#16 10. Februar 2011 12:54

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

cyberman schrieb:

Das sind noch nicht alle Daten - versuch mal diesen Tag
http://www.cmsmadesimple.de/forum/viewtopic.php?id=337

Das ist der Anfang der aufgeschlüsselten Daten:
Array
(
   SCRIPT_NAME => /index.php
   app_name => CMS
   sitename => Meier
   lang => de_DE
   encoding => utf-8
   content_obj => CatalogItem Object
   {
      attrs => Array
      (
         0 => stdClass Object
         {
            attr => Marke
            alias =>
            length => 25
            default =>
            select_values =>
            field_type => text
            safe => marke
         }
         1 => stdClass Object
         {
            attr => Modell
            alias =>
            length => 25
            default =>
            select_values =>
            field_type => text
            safe => modell
         }
         2 => stdClass Object
         {
            attr => Erstzulassung
            alias =>
            length => 20
            default =>
            select_values =>
            field_type => text
            safe => erstzulassung
         }

und so weiter…
Das "safe" ist vermutlich die Variable?

NaN schrieb:

Okay, jetzt mal bitte etwas mehr Klartext. Um welche Variablen genau geht es?
Um alle?
Oder nur um bestimmte Attribute?
Zeig doch mal ein oder zwei Beispiele.
(Wie es ist und wie es sein soll)

Beispiele habe ich nicht, ist ja nur eine Aufschlüsselung diverser Daten, ähnlich wie bei mobile.de
Es geht um alle im Katalog enthaltenen Variablen, das sind diese:
{$title}, {$notes}, {$marke}, {$modell}, {$erstzulassung}, {$leistung}, {$getriebe}, {$kraftstoffart}, {$hubraum}, {$farbe}, {$naechsterhutermin}, {$anzahlderfahrzeughalter}, {$preis}, {$zustand}, {$ausstattung}, {$klimatisierung}, {$anzahldertueren}, {$schadstoffklasse}, {$umweltplakette}, {$airbags}, {$sonstiges}, {$image_1_url}, {$image_thumb_1_url}, {$src_image_1_url}, {$image_2_url}, {$image_thumb_2_url}, {$src_image_2_url}, {$image_url_array}, {$src_image_url_array}, {$image_thumb_url_array}{$file_url_array}, {$file_name_array}, {$file_ext_array}, {$root_url}, {$image_root}

Es soll so funktionieren wie es ist. Soll heißen, dass Template hier gibt es wie gewünscht wieder. Nur leider werden auch die nicht ausgefüllten Daten mit angezeigt. Das war Anlass meiner Frage, ist es möglich nur die ausgefüllten Felder anzeigen zu lassen- mit meinem vorhandenen Template?:

<p>
<strong>{$marke} {$modell}</strong><br />
Baujahr {$erstzulassung}, {$preis}
</p>
<p>&nbsp;</p>
<div class="catalog_item">
<table>
<tr>
<td class="cat_bild"><img id="item_image" name="item_image"  src="{$image_1_url}" title="{$title}" alt="{$title}" /></td>
</tr>
<tr>
<td class="cat_thumbs">{section name=ind loop=$image_url_array}
<a href="javascript:repl('{$image_url_array[ind]}')" class="legal"><img src="{$image_thumb_url_array[ind]}" class="cat_thumbs_gfx" border="0" title="{$title}" alt="{$title}" /></a>
{/section}</td>
</tr>
</table>

<table>
{section name=at loop=$attrlist}
<tr>
<td class="kat_links">
<strong>{$attrlist[at].name}</strong>:
</td>
<td class="kat_rechts">
{eval var=$attrlist[at].key}
</td>
</tr>
{/section}
</table>

{literal}
<script type="text/javascript">
function repl(img)
   {
   document.item_image.src=img;
   }
</script>
{/literal}
</div>

Ich hoffe ich konnte jetzt verständlich machen worum es mir geht?

Offline

#17 14. Februar 2011 11:23

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Was genau wird bei {$erstzulassung|print_r} ausgegeben?

Offline

#18 16. Februar 2011 08:56

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

cyberman schrieb:

Was genau wird bei {$erstzulassung|print_r} ausgegeben?

Audi Avant A6
Baujahr 20031, 18.000 €


Bei {$erstzulassung} wird

Audi Avant A6
Baujahr 2003, 18.000 €

ausgegeben, mit |print_r wird eine '1' hinzugefügt.

Offline

#19 16. Februar 2011 10:08

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Wird eine "0" ausgegeben, wenn das Feld "Erstzulassung" leer ist?

Offline

#20 16. Februar 2011 15:30

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

cyberman schrieb:

Wird eine "0" ausgegeben, wenn das Feld "Erstzulassung" leer ist?

Eine '1' wird bei Nichteintrag angezeigt.

Offline

#21 16. Februar 2011 16:38

piratos
Gast

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Eine '1' wird bei Nichteintrag angezeigt.

Das ist Mist, nun bleibt dir nichts anderes übrig als alle Felder dahingehend zu prüfen ob sie vorhanden und leer sind.

{if isset($namedervar) and $namedervar<>'1'} {$namedervar}{/if}

Ich hoffe du hast nicht die Absicht mit cmsms so etwas wie mobile.de oder daz24.de aufbauen zu wollen , da wirst du ganz schnell an die Grenzen von CMSMS stoßen.

#22 16. Februar 2011 19:17

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

piratos schrieb:

Das ist Mist, nun bleibt dir nichts anderes übrig als alle Felder dahingehend zu prüfen ob sie vorhanden und leer sind.

{if isset($namedervar) and $namedervar<>'1'} {$namedervar}{/if}

{if isset($erstzulassung) and $erstzulassung<>'1'} {$erstzulassung}{/if}

Wäre das korrekt?

Und, wo kommt die Anweisung zu stehen?
Wahrscheinlich muss ich alle vars einzeln aufführen, richtig?:

{if isset($marke) and $marke<>'1'} {$marke}{/if}
{if isset($modell) and $modell<>'1'} {$modell}{/if}
{if isset($erstzulassung) and $erstzulassung<>'1'} {$erstzulassung}{/if}
u.s.w.

Kann man das nicht irgendwie mit der "var=$attrlist[at].key" global lösen?
Du merkst sicher das ich kein wirklicher Experte in diesen Dingen bin ops

Offline

#23 16. Februar 2011 19:24

piratos
Gast

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Einsetzen - da kann nichts schlimmes passieren.

Und klar ist wenn man Baujahr {$erstzulassung}  hat das man es da auch einsetzen muss.

Das wird ein Geschreibsel - oh mann.

#24 16. Februar 2011 21:37

dylan
kennt CMS/ms
Ort: Münsterland
Registriert: 16. Dezember 2010
Beiträge: 303

Re: cataloger: Nur ausgefüllte Variablen anzeigen

piratos schrieb:

Einsetzen - da kann nichts schlimmes passieren.

smile

piratos schrieb:

Einsetzen - da kann nichts schlimmes passieren.

Und klar ist wenn man Baujahr {$erstzulassung}  hat das man es da auch einsetzen muss.

Eine Frage noch, wegen des Titels, bzw. "name".
Im Original ist es so aufgebaut:
<strong>{$attrlist[at].name}</strong>: {eval var=$attrlist[at].key}

Bei mir wird's vermutlich (?) so aussehen:
{if isset($erstzulassung) and $erstzulassung<>'1'}
<tr>
<td class="kat_links"><strong>{$erstzulassung[at].name}</strong>:</td>
<td class="kat_rechts">{$erstzulassung}</td>
</tr>
{/if}

Wie sieht die Variable für 'name' aus? So wie ich's hier versucht habe wirft es eine Fehlermeldung raus.

Offline

#25 16. Februar 2011 21:43

piratos
Gast

Re: cataloger: Nur ausgefüllte Variablen anzeigen

Nach deiner Definition ist $erstzulassung ein Array deswegen kann man auch nicht{$erstzulassung} schreiben und du wirst wahrscheinlich alle Werte innerhalb des Arrays abprüfen müssen.

Wenn du nicht sicher bist welche Wert in $erstzulassung stecken {$erstzulassung|print_r} ausgeben.