Browserabfrage für Blöcke

Begonnen von Franky, 09 April 2009, 18:50:04

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Franky

Hi,

eine Frage an die PHP-Profis.

Ist es möglich, für einzelne Blöcke eine Browserabfrage zu generieren?

Ich müsste für ie6 (und älter) User einen anderen Block anzeigen lassen, wobei der Originalblock dabei ausgeblendet werden muss.

Hintergrund ist, dass ich ein CSS-Menue habe, welches ältere Browser nicht richtig anzeigen. Da ich mal wieder mehrsprachig arbeite, muss ich ein solches Flyout-Menü im Block verwenden.

Es gibt zwar jede Menge davon bei z. B. Dynamic-Drive. Allerdings krieg ich das dann nicht mehrsprachig hin innerhalb von Pragma.

Hat jemand ne Idee?

Thx und ciao

Frank
"Ich möchte schlafend sterben, wie mein Opa, nicht schreiend, wie sein Beifahrer."

siggi

Zitat
Ist es möglich, für einzelne Blöcke eine Browserabfrage zu generieren?
Ich müsste für ie6 (und älter) User einen anderen Block anzeigen lassen, wobei der Originalblock dabei ausgeblendet werden muss.

Hab's jetzt nicht ausprobiert, sollte aber funktionopeln  :morning:

Code (block-irgendeiner.php) Auswählen

<?php
...

$agent getenv'HTTP_USER_AGENT' );

if ( 
preg_match("/MSIE/i"$agent )  && !preg_match"/MSIE 7/i"$agent )  && !preg_match"/MSIE 8/i"$agent ) )  {

   include( 
'blocks/block-anderen.php' );

   return; 


  
//  $content des Originalblocks hier ...


Wenn man an Gras zieht wächst es auch nicht schneller.

Franky

Moin Siggi,

leider nicht wirklich.

Der Inhalt hat ein eigenes Stylesheet.

Wenn ich das wie oben gesagt mache krieg ich nur Fehler beim erstellen des Blocks.

Der Inhalt des Originalblocks sieht so aus:

<style>

.menu { margin: 4px; height: 150px; font-size: 8pt; font-family: verdana; }
.menu ul { margin: 0pt; padding: 0pt; position: relative; z-index: 500; list-style-type: none; width: 6em; }
.menu li { background-color: #f4f4f4; float: left; }
.menu li.sub { background-color: #f4f4f4; }
.menu table { position: absolute; border-collapse: collapse; top: 0pt; left: 0pt; z-index: 100; font-size: 1em; margin-top: -1px; }
.menu a, .menu a:visited { border: 1px solid #f4f4f4; display: block; text-decoration: none; height: 2em; line-height: 2em; width: 11em; color: #2f385f; padding-left: 1em; font-weight: normal; font-style: normal; font-variant: normal; text-transform: none; }
.menu b { float: right; margin-right: 5px; }
* html .menu a, * html .menu a:visited { width: 11em; }
* html .menu a:hover { color: #2F385F; background-color: #ccffff; position: relative; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; text-transform: none; }
.menu li:hover { position: relative; }
.menu a:active, .menu a:focus { color: #2F385F; background-color: #ccffff; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; text-transform: none; }
.menu li:hover > a { color: #2F385F; background-color: #ccffff; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; text-transform: none; }
.menu li ul { padding: 2em; visibility: hidden; position: absolute; top: -2em; left: 7em; background-color: transparent; }
.menu li:hover > ul { visibility: visible; }
.menu ul a:hover ul ul { visibility: hidden; }
.menu ul a:hover ul a:hover ul ul { visibility: hidden; }
.menu ul a:hover ul a:hover ul a:hover ul ul { visibility: hidden; }
.menu ul a:hover ul { visibility: visible; }
.menu ul a:hover ul a:hover ul { visibility: visible; }
.menu ul a:hover ul a:hover ul a:hover ul { visibility: visible; }
.menu ul a:hover ul a:hover ul a:hover ul a:hover ul { visibility: visible; }

</style>



<div class="menu">
  <ul>
......... usw


Mach ich was falsch?

ciao

Frank  :morning:
"Ich möchte schlafend sterben, wie mein Opa, nicht schreiend, wie sein Beifahrer."

siggi

#3
Hallo :)

ZitatMach ich was falsch?

Ich würde sagen ja. In einem Block gehören CSS-Anweisungen so nicht rein, weder in einem erstellten HTML-Block noch in eine Blockdatei. Diese müssen, damit die Seite korrekt validiert wird immer zwischen die <head></head> - Tags.

Mein Beispiel funktioniert. Wenn der Code ^^ am Anfang der Blockdatei deines Originalblocks ( kein HTML-Block wohlgemerkt ) eingetragen wird, inkludiert dieser eine andere Blockdatei, wenn der Client den Internet Explorer 6 benutzt.
Um nun CSS-Anweisungen in den Header zu transportieren benutzt man die pmxHeader::add() Methode.

Falls du allerdings eine Art CSS-Weiche brauchst könnte der Block folgendermaßen aussehen :

blocks/block-Beispiel.php :

$agent = getenv( 'HTTP_USER_AGENT' );

if ( preg_match("/MSIE/i", $agent )  && !preg_match( "/MSIE 7/i", $agent )  && !preg_match( "/MSIE 8/i", $agent ) )  {
   pmxHeader::add(
   '<style type="text/css">
    // hier die CSS-Anweisungen fuer den IE6 ...   
   </style>');
}
else { 
  pmxHeader::add(
   '<style type="text/css">
    // hier die CSS-Anweisungen fuer alle anderen ...   
   </style>');
}


Auf diese Weise wird in dem Block auf den IE6 geprüft und dementsprechend der eine oder der andere Style in den Header geschrieben.  ;)
Wenn man an Gras zieht wächst es auch nicht schneller.

reddragon

HI,

ich habe in der Theme.html folgende If-Frage, da es bei meiner Seite schwierigkeite mit den PNG gab.
<!--[if lt IE 7]>   
<![endif]-->   


es hat sich problemlos im html einbauen lassen.....