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

#1 18. Oktober 2012 12:52

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Smarty Variablenübergabe bei Wert "0"

Moin!

Folgendes Problem:

Wenn das Search-Modul nichts findet, ist $itemcount "0"

Das übergebe ich an eine weitere Variable:
{assign var="searchCount" value=$itemcount}

Damit rufe ich ein Plugin auf:
{simplePiwik siteid="2" count="$searchCount"}

Das Problem: Wenn $searchCount "0" ist dann wird das offenbar als "null" bzw. "nicht gesetzt" übermittelt, denn ein ISSET im genannten Plugin ergibt FALSE.

Ich verwende einen grauenvollen veryquick&VERYDIRTY hack indem ich
$searchCount == "nada"
setze wenn $itemcount = "0" ist ... das dann übergebe und im Plugin dann rückwärts wieder in "0" wandle.

Das kanns doch nicht sein ... ich habe zu dieser Problematik allerdings bisher nix gefunden. Oder ich bin schlicht zu doof danach zu suchen ...

kann mich mal bitte jemand erleuchten?
Servus,
Alex

Offline

#2 18. Oktober 2012 13:09

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

Re: Smarty Variablenübergabe bei Wert "0"

Mit diversen Anführungszeichen hast Du bestimmt auch schon gespielt?

{assign var="searchCount" value="$itemcount"}

Wenn count bei Deinem Plugin zwingend nötig ist, dann würde ich nicht erst mit isset prüfen, sondern einfach auf $params['count'] zugreifen. Ist schließlich Dein Plugin, und Du wirst wissen was Du damit machst.

Wenn Du aber auf Nummer sicher gehen und es evtl. veröffentlichen willst, dann kannst Du es anstelle von isset() auch mal mit if(array_key_exists('count', $params)) versuchen.

Ist $itemcount denn tatsächlich "0" ?
Du könntest mit einem Modifikator auch sicherstellen, dass, sollte $itemcount nüscht sein, es als Zahl übergeben wird:

{simplePiwik siteid="2" count=$searchCount|@intval}

Ein solches Verhalten ist mir sonst noch nicht untergekommen.


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

#3 18. Oktober 2012 13:12

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

Re: Smarty Variablenübergabe bei Wert "0"

Und Gott sprach: " Es werde Licht ..."  big_smile

http://www.smarty.net/docs/en/language. … efault.tpl

faglork schrieb:

Das übergebe ich an eine weitere Variable:
{assign var="searchCount" value=$itemcount}

Damit rufe ich ein Plugin auf:
{simplePiwik siteid="2" count="$searchCount"}

Konsequenterweise würde ich dies aber mit

{simplePiwik siteid="2" count=$searchCount}

machen ...

Offline

#4 18. Oktober 2012 13:46

czarnowski
kennt CMS/ms
Registriert: 18. Oktober 2012
Beiträge: 457

Re: Smarty Variablenübergabe bei Wert "0"

Unter Smarty 3 kann man sich das assign gedöns schenken:

Nullwerte kann man ganz einfach abfangen indem man eine erneute Zuweisung macht mit einem Defaultwert:

{$meintext=null}

{$meintext=$meintext|default:'Tralala'}

{$meintext}

{$meintext=1}

{$meintext=$meintext|default:'Nanu sollte 1 sein'}

{$meintext}

Offline

#5 18. Oktober 2012 17:30

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: Smarty Variablenübergabe bei Wert "0"

NaN schrieb:

Mit diversen Anführungszeichen hast Du bestimmt auch schon gespielt?

{assign var="searchCount" value="$itemcount"}

Das ändert nix.

NaN schrieb:

Ist $itemcount denn tatsächlich "0" ?

Nun, es ist die Anzahl der gefundenen Suchergebnisse. In der mitgelieferten Template des Search-Moduls wird "if $itemcount > 0" verwendet, also muss es doch 0 sein, oder nicht?

NaN schrieb:

Du könntest mit einem Modifikator auch sicherstellen, dass, sollte $itemcount nüscht sein, es als Zahl übergeben wird:

{simplePiwik siteid="2" count=$searchCount|@intval}

count=$searchCount|@intval  ergibt keine Änderung. Erstaunlicherweise ergibt count="$searchCount|@intval" als Ergebnis "0|@intval" ... $searchCount wird also korrekt als "0" übertragen, aber das |@intval hängt mit dran ...

NaN schrieb:

Ein solches Verhalten ist mir sonst noch nicht untergekommen.

Tja, was es nicht alles gibt ;-)

Servus und Danke für die Tipps! (Gilt natürlich für alle!)
Alex

Beitrag geändert von faglork (18. Oktober 2012 17:35)

Offline

#6 18. Oktober 2012 17:34

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: Smarty Variablenübergabe bei Wert "0"

cyberman schrieb:

Und Gott sprach: " Es werde Licht ..."  big_smile

http://www.smarty.net/docs/en/language. … efault.tpl

Nix mit Licht ;-)

default nützt hier nix weil die Variable ja *in jedem Fall* überschrieben wird durch die Anzahl der Suchergebnisse ...

Das Problem ist ja auch nicht die initiale Zuweisung der Variablen, sondern die Übergabe an das Plugin. Die Variable kommt nicht als "0" an.

cyberman schrieb:
faglork schrieb:

Das übergebe ich an eine weitere Variable:
{assign var="searchCount" value=$itemcount}

Damit rufe ich ein Plugin auf:
{simplePiwik siteid="2" count="$searchCount"}

Konsequenterweise würde ich dies aber mit

{simplePiwik siteid="2" count=$searchCount}

machen ...

Das ändert auch nix.

Servus,
Alex

Beitrag geändert von faglork (18. Oktober 2012 17:38)

Offline

#7 18. Oktober 2012 17:42

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: Smarty Variablenübergabe bei Wert "0"

czarnowski schrieb:

Unter Smarty 3 kann man sich das assign gedöns schenken:

Nullwerte kann man ganz einfach abfangen indem man eine erneute Zuweisung macht mit einem Defaultwert:

Siehe oben. Auch das geht am Problem vorbei.

Nochmal: Das Problem ist die Übergabe an das Plugin. Ich gehe mal davon aus, dass das Search-Modul bei erfolgloser Suche als Anzahl ("$itemcount") eine "0" ausgibt. Sonst würde ja auch der Vergleich "if $itemcount > 0" nicht funktionieren, oder seh ich das falsch?

Servus,
Alex

Offline

#8 18. Oktober 2012 19:07

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

Re: Smarty Variablenübergabe bei Wert "0"

Hab gerade mal ins Such-Modul geschaut. Der Wert sollte in jedem Fall wenigstens den Integer-Wert 0 enthalten. Warum das bei der Übergabe an das Plugin verloren geht, kann ich noch nicht genau sagen. Was passiert denn, wenn Du Dir mal die übergebenen Parameter im Plugin mit print_r($params); ausgibst?


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

#9 18. Oktober 2012 19:34

czarnowski
kennt CMS/ms
Registriert: 18. Oktober 2012
Beiträge: 457

Re: Smarty Variablenübergabe bei Wert "0"

Nun die erneute Zuweisung mit einem Default erledigt das Problem wenn man nicht weiss ob ein Wert NULL ist oder 0.

Ich sehe eher wie NaN das Problem das der Wert im Plugin bei der Parameterauswertung  gecancelt wird.

Mit isset erhält man ja true wenn der Wert <> NULL ist UND existiert .
Da du ein FALSE bekommst, das Suchmodule aber definitiv eine 0 oder > 0 und keine NULL ausgibt kann der Wert nur in dem Bereich Pluginkopf und isset Prüfung flöten gegangen sein.

Hätte man die  erneute Zuweisung probiert, dann wüsste man das der Bock im Plugin liegt.

Offline

#10 18. Oktober 2012 21:08

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: Smarty Variablenübergabe bei Wert "0"

czarnowski schrieb:

Nun die erneute Zuweisung mit einem Default erledigt das Problem wenn man nicht weiss ob ein Wert NULL ist oder 0.

czarnowski schrieb:

Hätte man die  erneute Zuweisung probiert, dann wüsste man das der Bock im Plugin liegt.

Verstehe ich nicht, sorry. Wo ist der Unterschied zwischen

{$meintext=$meintext|default:'0'}

und der testhalber expliziten Zuweisung

{$meintext='0'}

? Das funzt ja auch nicht.

czarnowski schrieb:

Ich sehe eher wie NaN das Problem das der Wert im Plugin bei der Parameterauswertung  gecancelt wird.

czarnowski schrieb:

Mit isset erhält man ja true wenn der Wert <> NULL ist UND existiert .
Da du ein FALSE bekommst, das Suchmodule aber definitiv eine 0 oder > 0 und keine NULL ausgibt kann der Wert nur in dem Bereich Pluginkopf und isset Prüfung flöten gegangen sein.

Reingeholt in das Plugin wird mit

if ($params['count']) $count = $params['count']; (FYI: if isset ändert auch nix ...)

geprüft wird mit

if (isset ($count))
(was FALSE ist wenn die "0" übergeben wurde und nur TRUE wird wenn $count explizit wieder auf "0" gestzt wird.)

Wo soll da was "flöten" gehen? Es betrifft ja auch nur die "0".
Das würde ja bedeuten, dass $count = $params['count'] im Fall der "0" gleichbdeutend wäre mit einem unset ...

Um das nochmal klar zu machen: Wenn die "0" an das Plugin übergeben wird passiert folgendes:

if (isset ($params['count'])) ist TRUE

nach $count = $params['count'] aber:

if (isset ($count)) ist FALSE

Brat mir doch einer nen Storch!

hier ist noch mal der komplette code des plugins:

function smarty_cms_function_simplePiwik($params, &$smarty)
{
$siteid ="1";
if ($params['siteid']) $siteid = $params['siteid'];
if (isset ($params['count'])) $count = $params['count'];
if ($count =="nada") {
	$count="0";
}
if (isset ($count)) {
echo <<<EOT
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.faktori.de/piwik/" : "http://stats.faktori.de/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", $siteid);
piwikTracker.setCustomUrl(document.URL + '&search_count=' + $count);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://stats.faktori.de/piwik/piwik.php?idsite=$siteid" style="border:0" alt="" /></p></noscript>
EOT;
} else {

echo <<<EOT
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.faktori.de/piwik/" : "http://stats.faktori.de/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", $siteid);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://stats.faktori.de/piwik/piwik.php?idsite=$siteid" style="border:0" alt="" /></p></noscript>
EOT;
}
}

Servus,
Alex

Offline

#11 19. Oktober 2012 09:43

czarnowski
kennt CMS/ms
Registriert: 18. Oktober 2012
Beiträge: 457

Re: Smarty Variablenübergabe bei Wert "0"

Also ich habe das mal im Suchtemplate eingesetzt:

[== smarty ==]
<h3>{$searchresultsfor} &quot;{$phrase}&quot;</h3>
{assign var="searchCount" value=$itemcount}
{if $itemcount > 0}
<ul>
  {foreach from=$results item=entry}
  <li>{$entry->title} - <a href="{$entry->url}">{$entry->urltxt}</a> ({$entry->weight}%)</li>
  {* 
     You can also instantiate custom behaviour on a module by module basis by looking at
     the $entry->module and $entry->modulerecord fields in $entry 
      ie: {if $entry->module == 'News'}{News action='detail' article_id=$entry->modulerecord detailpage='News'} 
  *}
  {/foreach}
</ul>

<p>{$timetaken}: {$timetook}</p>
{else}
  <p><strong>{$noresultsfound}</strong></p>
{/if}
{$searchCount}
{simplePiWik siteid="2" count=$searchCount}

Das Plugin mal so nachgebildet:

[== PHP ==]
<?php
function smarty_function_simplePiWik($params, &$smarty)
{
	print_r($params);
}
?>

Ausgaben bei 0 Treffer

Array ( [siteid] => 2 [count] => 0)

wenn ich am Anfang das mache:

{$itemcount=null}  - also eine echte null einsetze

dann kommt das:

Array ( [siteid] => 2 [count] => )

Mit anderen Worten die Parameterübergabe funktioniert einwandfrei.

Jedoch ist die Parameterauswertung selbst ungewöhnlich für Smartyplugins.

Man macht das z.B. so

$print = (isset($params['print'])) ? (bool)$params['print'] : true;

d.h. hier bekommt $print auf jeden Fall einen Wert.

Bei dir ist  $count im Zweifelsfalle überhaupt nicht vorhanden.

f (isset ($params['count'])) $count = $params['count'];
if ($count =="nada") {
    $count="0";
}

if ($count =="nada")  führt zu einem E_STRICT Fehler wenn $count nicht gesetzt ist.

Beitrag geändert von czarnowski (19. Oktober 2012 09:44)

Offline

#12 19. Oktober 2012 10:04

czarnowski
kennt CMS/ms
Registriert: 18. Oktober 2012
Beiträge: 457

Re: Smarty Variablenübergabe bei Wert "0"

Also auch das funzt einwandfrei:

[== PHP ==]
<?php
function smarty_function_simplePiWik($params, &$smarty)
{
	print_r($params);
$siteid ="1";
if ($params['siteid']) $siteid = $params['siteid'];
if (isset ($params['count'])) $count = $params['count'];

echo "COUNT $count";
if (isset ($count)) {
echo " COUNT2 Anzeige  $count";
}
}
?>

Offline

#13 19. Oktober 2012 11:56

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: Smarty Variablenübergabe bei Wert "0"

Ich versteh die Welt nicht mehr. Heute funktionierts ...

Ich danke euch allen für die Hilfe!

Servus,
Alex

Offline