Page 1 of 1

Werbung für Besucher von bestimmten Quellen einblenden

Posted: Tue Jul 17, 2007 8:31 am
by marf
Hi,

kurz was ich vorhabe: Ich möchte eine Abfrage in die entries.tpl (im extended entry) einbauen, die prüft, woher ein Besucher kommt (z.B. Google) und nur für solche "irgendetwas" Anzeigen.

Zum Beispiel sollen Besucher, die einen Artikel direkt aufrufen, keine Werbung sehen. Besucher jedoch, die über die Google-Suche kamen sollen einen Werbeblock angezeigt bekommen.

Ich weiß, dass es für WP zu diesem Zwecke en Plugin gibt. Wie ist das bei Serendipity? Kann auch eine handgemachte Lösung sein.
Danke vorab!

Gruß, Markus

Re: Werbung für Besucher von bestimmten Quellen einblenden

Posted: Tue Jul 17, 2007 10:54 am
by garvinhicking
Hi!

Dafür würde ich folgendes vorschlagen.

Du erstellst in deinem template eine config.inc.php:

Code: Select all

<?php
if (stristr($_SERVER['HTTP_REFERER'], 'google.')) {
    $_SESSION['from_google'] = true;
}

$serendipity['smarty']->assign('from_google', $_SESSION['from_google']);
?>
Dieser Code sorgt dafür, dass eine Sessionvariable 'from_google' gesetzt wird. D.h. wenn ein Besucher einmal für Google kam, ist er für die Dauer des Besuches als Google-User identifiziert.

Jetzt muss das ganze nur noch in Smarty ausgewertet werden, dort kannst Du auf die Variable {if $from_google} zugreifen.

Hilft Dir das weiter? Man könnte es alternativ auch mit einem Event-plugin lösen, aber das wäre dann einen Tick mehr Code.

Viele Grüße,
Garvin

Posted: Tue Jul 17, 2007 11:28 am
by marf
Super, das ist genau das was ich gesucht habe! Werde das heute Abend mal testen, vielen Dank!

Eine Frage noch: Wann wird denn die config.inc.php aufgerufen? Zur Laufzeit, wenn ich auf die Variable from_google zugreife? Woher kennt meine entries.tpl die config.inc.php?

Posted: Tue Jul 17, 2007 11:32 am
by garvinhicking
Hi!

Die config.inc.php wird von Serendipity bei jedem Aufruf des Frontends ausgeführt, kurz nachdem das Smarty-Framework von Serendipity aufgerufen wurde. Also noch bevor deine entries.tpl überhaupt "geladen" wird. Daher kann sie auf die Variablen zugreifen.

Deine entries.tpl muss die config.inc.php nicht kennen, da das zentrale Serendipity-System sie erkennt.

Grüße,
Garvin

Posted: Tue Jul 17, 2007 11:42 am
by marf
Alles klar!

Wäre es denkbar, den Code so auszubauen um beispielsweise weitere Suchmaschinen abzubilden? (Ich kenne den Operator für "oder" nicht)

Code: Select all

<?php 
if (stristr($_SERVER['HTTP_REFERER'], 'google.') or
    stristr($_SERVER['HTTP_REFERER'], 'yahoo.') ) { 
    $_SESSION['from_searchengine'] = true; 
} 

$serendipity['smarty']->assign('from_searchengine', $_SESSION['from_searchengine']); 
?> 

Posted: Tue Jul 17, 2007 11:48 am
by falk
marf wrote:Wäre es denkbar, den Code so auszubauen um beispielsweise weitere Suchmaschinen abzubilden? (Ich kenne den Operator für "oder" nicht)

Code: Select all

<?php 
if (stristr($_SERVER['HTTP_REFERER'], 'google.') or
    stristr($_SERVER['HTTP_REFERER'], 'yahoo.') ) { 
    $_SESSION['from_searchengine'] = true; 
} 

$serendipity['smarty']->assign('from_searchengine', $_SESSION['from_searchengine']); 
?> 
Der Operator ist ||, also

Code: Select all

<?php 
if (stristr($_SERVER['HTTP_REFERER'], 'google.') ||
    stristr($_SERVER['HTTP_REFERER'], 'yahoo.') ) { 
    $_SESSION['from_searchengine'] = true; 
} 

$serendipity['smarty']->assign('from_searchengine', $_SESSION['from_searchengine']); 
?> 
Theoretisch müsste es so klappen.

Posted: Tue Jul 17, 2007 11:56 am
by marf
Ok danke! Das war's erstmal.

Posted: Tue Jul 17, 2007 2:30 pm
by garvinhicking
Hi!

Eine weitere Idee ist mir noch gekommen. Es gibt das Plugin 'Hebe Suchwörter hervor', das die Wörter in einem Artikel hervorheben kann, die ein Besucher übermittelt hat.

Das könntest Du auch installieren und dann die serendipity_event_searchhighlight.php editieren. Suche nach:

Code: Select all

            if ( ($queries = $this->getQuery()) === false ) {
                return;
            }
und füge danach ein:

Code: Select all

           $_SESSION['is_searchengine_visitor'] = true;
Danach kannst Du dann in der entrie.stpl die Variable {if $smarty.session.is_searchengine_visitor} abprüfen. Dann sparst Du dir die Template-Datei, und hast sogar noch Suchworthervorhebung :)

Grüße,
Garvin

Re: Werbung für Besucher von bestimmten Quellen einblenden

Posted: Thu Feb 23, 2012 2:28 pm
by Matthias2
Hi.

Wie kann ich mit der Variable {if $smarty.session.is_searchengine_visitor} in der Seitenleiste arbeiten? Z.B. für das Plugin serendipity_plugin_google_adsense, damit die Werbung nur den Suchmaschinenbesuchern in der Seitenleite angezeigt wird.

Direkt im Plugin und in der sidebar.tpl war ich bisher erfolglos.

Vielen Dank und Grüße

Matthias

Re: Werbung für Besucher von bestimmten Quellen einblenden

Posted: Thu Feb 23, 2012 4:05 pm
by garvinhicking
Hi!

In der sidebar.tpl musst Du im foreach-Loop die ID des Plugins abfragen und dann die Variable auslesen:

Code: Select all

{foreach from=$plugindata item=item}
{if $item.class == 'serendipity_plugin_google_adsense' && !$smarty.session.is_searchengine_visitor}
<!-- adsense plugin surpressed! -->
{else}
{* Usual sidebar.tpl code here: *}
<div class="serendipitySideBarItem container_{$item.class}">
        {if $item.title != ""}<h3 class="serendipitySideBarTitle {$item.class}">{$item.title}</h3>{/if}
        <div class="serendipitySideBarContent">{$item.content}</div>
</div>
{/if}
{/foreach}
Grüßer,
Garvin

Re: Werbung für Besucher von bestimmten Quellen einblenden

Posted: Mon Feb 27, 2012 12:19 am
by Matthias2
Klasse, vielen Dank!