Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#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 ..."
http://www.smarty.net/docs/en/language. … efault.tpl
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"
Mit diversen Anführungszeichen hast Du bestimmt auch schon gespielt?
{assign var="searchCount" value="$itemcount"}
Das ändert nix.
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?
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 ...
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"
Und Gott sprach: " Es werde Licht ..."
![]()
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.
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"
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"
Nun die erneute Zuweisung mit einem Default erledigt das Problem wenn man nicht weiss ob ein Wert NULL ist oder 0.
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.
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.
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} "{$phrase}"</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
Seiten: 1