Werbung für Besucher von bestimmten Quellen einblenden

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
marf
Regular
Posts: 19
Joined: Tue Feb 13, 2007 9:23 am
Location: Hamburg
Contact:

Werbung für Besucher von bestimmten Quellen einblenden

Post 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
Image
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Werbung für Besucher von bestimmten Quellen einblenden

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
marf
Regular
Posts: 19
Joined: Tue Feb 13, 2007 9:23 am
Location: Hamburg
Contact:

Post 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?
Image
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
marf
Regular
Posts: 19
Joined: Tue Feb 13, 2007 9:23 am
Location: Hamburg
Contact:

Post 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']); 
?> 
Image
falk
Regular
Posts: 512
Joined: Tue Sep 27, 2005 10:16 am
Location: DD
Contact:

Post 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.
marf
Regular
Posts: 19
Joined: Tue Feb 13, 2007 9:23 am
Location: Hamburg
Contact:

Post by marf »

Ok danke! Das war's erstmal.
Image
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Matthias2
Regular
Posts: 71
Joined: Sun Sep 17, 2006 2:22 pm

Re: Werbung für Besucher von bestimmten Quellen einblenden

Post 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
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Werbung für Besucher von bestimmten Quellen einblenden

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Matthias2
Regular
Posts: 71
Joined: Sun Sep 17, 2006 2:22 pm

Re: Werbung für Besucher von bestimmten Quellen einblenden

Post by Matthias2 »

Klasse, vielen Dank!
Post Reply