Facebook Scrollbar

27. Februar 2012

Plötzlich wollte die Scrollbar in meinem Facebook Tab nicht mehr verschwinden. Erst nach einer Weile wurde mir klar, dass es an dem clearfix Hack lag, der verträgt sich offenbar gar nicht mit Facebook. Ansonsten, zum Vermeiden der Scrollbars gehört dies ins Stylesheet:

  1. body, html {
  2.     overflow:hidden;
  3. }

und vor dem schließenden Body Tag folgendes:

  1. <div id="fb-root"></div>
  2. <script type="text/javascript" src="https://connect.facebook.net/de_DE/all.js"></script>
  3. <script type="text/javascript">
  4.         
  5.           FB.init({
  6.           appId  : 'APP_ID',
  7.           status : true,
  8.           cookie : true,
  9.           xfbml  : true,
  10.           oauth : true
  11.         });
  12.         $(document).ready( function(){
  13.             FB.Canvas.setSize({ height: $('body').height() });
  14.             FB.Canvas.scrollTo(0,0);
  15.         });
  16.         </script>

Facebook App: alle Gruppen des Users abfragen

23. Februar 2012

Problem:

Wenn ein User auf meine app kommt, möchte ich rausfinden, zu welchen Gruppen er gehört. Diese Info brauche ich für einen sehr speziellen Authentifikationsprozess bei dem nur Mitglieder einer bestimmten Gruppe bestimmte Inhalte der App sehen können.

Lösung:

Das ganze geht natürlich nicht ohne die Permissions des Users abzufragen. Man zwingt bittet den User zuerst, die Permission user_groups zu gewähren und anschließend kann man über die Facebook PHP Api ganz einfach die Groups abfragen! Hier der ganze Code:

  1. require_once 'facebook.php';
  2. $secret = "12345678901234567890123456789012"; //App Secret
  3. $id = "123456789012345"; //App ID
  4. $fb = new Facebook(array(
  5.     'appId'  => $id,
  6.     'secret' => $secret,
  7.     'cookie' => true
  8. ));
  9. $fbData = $fb->getSignedRequest();
  10. //if you don't have the user ID, this means your user hasn't given any permissions yet
  11. if(!$fbData['user_id']){    
  12.     //ask for permissions
  13.     $auth_url = "https://www.facebook.com/dialog/oauth?scope=user_groups&client_id=".$id."&redirect_uri=https://www.facebook.com/pages/PAGENAME/PAGEURL?sk=app_123456789012345";
  14.     echo '<script>top.location.href = "'.$auth_url.'";</script>';
  15.     die();
  16. }
  17. //get an access token
  18. $access_token = $fb->getAccessToken();
  19. //get the groups
  20. $res = $fb->api('/me/groups?access_token='.$access_token, 'GET');
  21. //output
  22. echo "Groups:<br>";
  23. echo "<ul>";
  24. foreach($res['data'] as $k => $group){
  25.     echo "<li>".$group['name']." (ID ".$group['id'].")</li>";
  26. }
  27. echo "</ul>";

 

jwplayer und OVA plugin

23. Februar 2012

Okay das hat mich sinnloserweise eine Menge Zeit und den letzten Rest an Nerven gekostet.

Vorgabe:

Videos kommen von vimeo, die müssen in einem eigenen Player abgespielt werden. Ihnen muss ein Werbevideo vorgeschaltet werden, die URL zu diesem Werbevideo enthält eine 10stellige Zufallszahl, weswegen die Konfiguration des ganzen nicht über ein config.xml file erfolgen darf sondern inline passieren muss. Vorgabe war ebenfalls, mit der Javascript API zu arbeiten anstatt das ganze schlichtweg über das <embed> Tag einzubauen.

Problem:

Die Doku ist mies. Ganz ehrlich, einfach mies. Man sucht Stunden und findet jede Menge Beispiele für Konfigurationen mit dem <embed> Tag, gleichzeitig aber fast keine Beispiele der javascript Einbindung. Hinzu kam, dass ich nach dem Kauf des jwplayers im zugehörigen Forum um Hilfe bat und dabei auf völliges Unverständnis und Desinteresse stieß. Der entsprechende Helfer war schien meinen Ausführungen kaum folgen zu können (Drogen?), verlangte einen Link, gab dann der URL des Werbevideos die Schuld und schließlich, als auch er mir folgen konnte, der ultimative Tipp: “poste doch im OVA Plugin Forum“. Ich möchte betonen dass es bis zu diesem Ratschlag immerhin 3 Tage gedauert hat…

Lösung:

Im OVA Plugin Forum war man auf einmal extrem schnell mit den Antworten, sehr hilfsbereit und hilfreich, kompetent und freundlich und binnen kürzester Zeit habe ich mit deren Hilfe das ganze zum Laufen gebracht. Hier mal ein fertiges Beispielscript, vielleicht hilft es anderen dabei, nicht denselben Hürden zu begegnen wie ich:

  1. <div id="container">Loading...</div><script type="text/javascript">
  2. jwplayer('container').setup({
  3.     'width': 500,
  4.     'height': 300,
  5.     'file': 'http://player.vimeo.com/external/123456.sd.mp4?s=858afaac8eebccc7acb544e998799a3d',
  6.     'skin': 'jwplayer/bekle.zip',
  7.     'plugins': {
  8.        'jwplayer/ova-jw.swf': {
  9.                     'ads': {
  10.                        'notice': { 'textStyle': 'smalltext' },
  11.                        'filterOnLinearAdMimeTypes': false,
  12.                        'schedule': [
  13.                              {
  14.                                   'zone': '47',
  15.                                   'position': 'pre-roll',
  16.                                   'server': {
  17.                                       'type': 'direct',
  18.                                     'tag': 'http://www.adververdomain.de/video?[<?php echo rand(1000000000, 9999999999); ?>]'
  19.                                   }
  20.                              },
  21.                              {
  22.                                   'zone': '48',
  23.                                   'position': 'auto:bottom',
  24.                                   'width': 320,
  25.                                   'height': 80,
  26.                                   'startTime': '00:00:02',
  27.                                   'duration': '5'
  28.                              }
  29.                         ]
  30.                     }   
  31.        },
  32.        'sharing-3': {
  33.            'link': '<?php echo $_SERVER['PHP_SELF']; ?>'
  34.        },
  35.        'fbit-1': {
  36.            'link': '<?php echo $_SERVER['PHP_SELF']; ?>'
  37.        },
  38.        'plugins': {
  39.            'gapro-2': {}
  40.         }
  41.     },
  42.     'modes': [
  43.         {type: 'flash', src: 'jwplayer/player.swf'},
  44.         {type: 'html5'},
  45.         {type: 'download'}
  46.     ]
  47. });
  48. </script>

Danke nochmal für die kompetente Hilfe im OVA Plugin Forum!

kein Rückgabe Wert bei $.ajax im Safari

13. Februar 2012

Wenn $.ajax und $.post NUR im Safari keinen Wert zurückliefern, kann es am Pfad liegen. Ich habe das ganze über http://www.domain.de/pfad/zu/ajax.php aufgerufen – das klappte im Firefox gut, im Safari nicht. Mit /pfad/zu/ajax.php klappte es dann aber!

wp_register_script wurde fehlerhaft aufgerufen

01. Februar 2012

Wenn man in WordPress debug auf true schaltet, bekommt man eventuell direkt die Meldung, dass wp_register_script oder wp_enqueue_script fehlerhaft aufgerufen wurde. Das hat mich schon etwas Zeit gekostet, die Lösung des Problems zu finden: man darf diese Funktionen nicht mehr so aufrufen sondern nur noch innerhalb einer action.

Vorher:

  1. if ( !is_admin() ) {
  2.     wp_deregister_script('jquery');
  3.     wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"), array('jquery'));
  4.     wp_enqueue_script('jquery');
  5. }

Nachher:

  1. if ( !is_admin() ) {
  2.     add_action('wp_enqueue_scripts', 'enqueue_scripts');    
  3. }    
  4. function enqueue_scripts() {
  5.     wp_deregister_script('jquery');
  6.     wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"), array('jquery'));
  7.     wp_enqueue_script('jquery');
  8. }

Und nun wirft das ganze keine Fehlermeldung bzw. Notice mehr aus!

wp-downloadmanager zeigt nach Servertransfer nichts mehr an

01. Februar 2012

Nach dem Umzug auf einen anderen Server zeigte der Downloadmanager plötzlich nichts mehr an außer Kategorien. Im Backend waren die Dateien noch vorhanden, nur angezeigt wurde nichts. Grund ist derselbe wie beim nextgen und contactform7 Plugin auch: sie alle gehen nach dem Serverumzug nicht mehr, weil die config Werte mit serialize() bearbeitet werden und mit einer geänderten Domain dann nicht mehr korrekt eingetragen werden. Hilft also nur eines: alle Download Templates händisch rüberkopieren und die Pfade ändern.