Kodi: FCK Editor - Wie führe ich eine Funktion aus

Hallo Forler,

ich habe ein sehr spezielles Problem aber hoffe dennoch
sehr sehr sehnsüchtig auf eine Antwort.

Es geht um den FCK Html Editor.

BITTE BITTE BITTE BITTE BITTE UM HILFE!!!
KOMME NICHT WEITER UND ES IST SEHR WICHTIG.

Ich möchte eine Funktion des Editors ansprechen.
Allerdings bekomme ich es nicht mit einem externen Button hin, diese
Funktion anzusprechen.

Im Javascript des Editors gibt es die Funktion die ich brauche.
Sie wird so ausgeführt.

onClick="FCKToolbarSet.Collapse();return false;"

Aber ausserhalb des Editors geht das nicht.
Fehlermeldung: FCKToolbarSet ist undifiniert

Wie kann ich diese Funktion dennoch ausführen.

Ich füge einfach mal den PHP Code mit in mein Post, vieleicht
hilft es.

class FCKeditor
{
 var $InstanceName ;
 var $BasePath ;
 var $Width ;
 var $Height ;
 var $ToolbarSet ;
 var $Value ;
 var $Config ;
 var $unterordner;

// PHP 5 Constructor (by Marcus Bointon coolbru@users.sourceforge.net)
 function __construct( $instanceName )
  {
  $this->InstanceName = $instanceName ;
  $this->BasePath  = "http://".PROJECT_DOMAIN."/".$unterordner."admin/" ;
  $this->Width  = '100%' ;
  $this->Height  = '500' ;
  $this->ToolbarSet = "low" ;
  $this->Value  = '' ;

$this->Config  = array() ;
 }

// PHP 4 Contructor
 function FCKeditor( $instanceName )
 {
  $this->__construct( $instanceName ) ;
 }

function Create()
 {
  echo $this->CreateHtml() ;
 }

function CreateHtml()
 {
  $HtmlValue = htmlspecialchars( $this->Value ) ;

$Html = '<div>' ;

if ( $this->IsCompatible() )
  {
   $Link = "{$this->BasePath}editor/fckeditor.html?InstanceName={$this->InstanceName}" ;

if ( $this->ToolbarSet != '' )
    $Link .= "&amp;Toolbar={$this->ToolbarSet}" ;

// Render the linked hidden field.
   $Html .= "<input type="hidden" id="{$this->InstanceName}" name="{$this->InstanceName}" value="{$HtmlValue}" />" ;

// Render the configurations hidden field.
   $Html .= "<input type="hidden" id="{$this->InstanceName}___Config" value="" . $this->GetConfigFieldString() . "" />" ;

// Render the editor IFRAME.
   $Html .= "<iframe id="{$this->InstanceName}___Frame" src="{$Link}" width="{$this->Width}" height="{$this->Height}" frameborder="no" scrolling="no"></iframe>" ;
  }
  else
  {
   if ( strpos( $this->Width, '%' ) === false )
    $WidthCSS = $this->Width . 'px' ;
   else
    $WidthCSS = $this->Width ;

if ( strpos( $this->Height, '%' ) === false )
    $HeightCSS = $this->Height . 'px' ;
   else
    $HeightCSS = $this->Height ;

$Html .= "<textarea name="{$this->InstanceName}" rows="4" cols="40" style="width: {$WidthCSS}; height: {$HeightCSS}" wrap="virtual">{$HtmlValue}</textarea>" ;
  }

$Html .= '</div>' ;

return $Html ;
 }

function IsCompatible()
 {
  global $HTTP_USER_AGENT ;

if ( isset( $HTTP_USER_AGENT ) )
   $sAgent = $HTTP_USER_AGENT ;
  else
   $sAgent = $_SERVER['HTTP_USER_AGENT'] ;

if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false )
  {
   $iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ;
   return ($iVersion >= 5.5) ;
  }
  else if ( strpos($sAgent, 'Gecko/') !== false )
  {
   $iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ;
   return ($iVersion >= 20030210) ;
  }
  else
   return false ;
 }

function GetConfigFieldString()
 {
  $sParams = '' ;
  $bFirst = true ;

foreach ( $this->Config as $sKey => $sValue )
  {
   if ( $bFirst == false )
    $sParams .= '&amp;' ;
   else
    $bFirst = false ;

if ( $sValue === true )
    $sParams .= $this->EncodeConfig( $sKey ) . '=true' ;
   else if ( $sValue === false )
    $sParams .= $this->EncodeConfig( $sKey ) . '=false' ;
   else
    $sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ;
  }

return $sParams ;
 }

function EncodeConfig( $valueToEncode )
 {
  $chars = array(
   '&' => '%26',
   '=' => '%3D',
   '"' => '%22' ) ;

return strtr( $valueToEncode,  $chars ) ;
 }
}

$sBasePath = "http://www.yxyxc.de/admin/" ;
$oFCKeditor = new FCKeditor("nachricht") ;
$oFCKeditor->BasePath = $sBasePath ;
$oFCKeditor->Value  = $member_mailtext ;
$oFCKeditor->Create() ;

Wäre extrem froh wenn jemand die Antwort weiß.

kodi

  1. Hallo Kodi,

    BITTE BITTE BITTE BITTE BITTE UM HILFE!!!
    KOMME NICHT WEITER UND ES IST SEHR WICHTIG.

    Was schreist Du denn so?

    onClick="FCKToolbarSet.Collapse();return false;"

    »»

    Ich füge einfach mal den PHP Code mit in mein Post, vieleicht
    hilft es.

    Das ist kein PHP, sondern Javascript! Suche dort nach dem Objekt, das angesprochen wird.

    Grüße

    Nico

    1. Suche dort nach dem Objekt, das angesprochen wird.

      Ich hab alle Seiten durchsucht, finde nichts.
      Ich hab aber etwas entdeckt.

      Der Editor wird in einem Iframe geöffnet.
      Nur finde ich auch nichts darüber wie ich eine Funktion
      in einem Iframe ansrpreche.

      document.iFrame.getElementById( 'Collapsed' ).style.display = '' ;

      geht nicht. Ich such schon mal weiter.
      Wenn du ne Lösung hast kannst Sie natürlich gerne posten. :)

    2. Ich füge einfach mal den PHP Code mit in mein Post, vieleicht
      hilft es.

      Das ist kein PHP, sondern Javascript! Suche dort nach dem Objekt, das angesprochen wird.

      Das ist JS? Das glaube ich nicht.

      Struppi.

      1. Das ist JS? Das glaube ich nicht.

        @Struppi: Natürlich. onclick-Events gibt es in PHP nicht.

        @Kodi: Du musst dir die externe js-Datei mit dem Namen fckeditorcode_gecko.js anschauen (ganz offensichtlich für die verschiedenen Rendering-Engines mit leicht anderem Namen). Dort wird z. B. die

        var FCKToolbarSet = function () {}

        erzeugt. Hier oder irgendwo in der Datei, musst du schauen, wie du das Objekt korrekt ansprichst.

        Um es anzusprechen muss es in dem Kontext, aus dem heraus du es ansprechen willst, natürlich definiert sein. Wenn du dir irgendwo eine Webseite machst, ohne dass auf dieser Seite zuvor das Objekt definiert wurde, kannst du es natürlich nicht ansprechen. Sprichst Du es z. B. aus einem übergeordneten Frame an, musst du wohl erst den Frame, in dem es definiert ist, ansprechen.

        Grüße

        Nico

        1. @Struppi: Natürlich. onclick-Events gibt es in PHP nicht.

          Deine Antwort war etwas mißverständlich:

          Ich füge einfach mal den PHP Code mit in mein Post, vieleicht
          hilft es.

          Das ist kein PHP, sondern Javascript!

          Du hattest dich auf den Code der vor dem Satz stand, bezogen:

          onClick="FCKToolbarSet.Collapse();return false;"

          Das war mir nicht klar

          Struppi.

  2. hallo,

    BITTE BITTE BITTE BITTE BITTE UM HILFE!!!
    KOMME NICHT WEITER UND ES IST SEHR WICHTIG.

    Ups. Jetzt muß ich zum Ohrenarzt.

    Allerdings bekomme ich es nicht mit einem externen Button hin, diese Funktion anzusprechen.

    Den gesamten Rest deines Postings hättest du dir sparen können, wenn du _hier_ deutlich gemacht hättest, was du unter einem "externen button" verstehst, wo der untergebracht ist, und warum der nun eine ganz spezielle Funktion des FCK-Editors aufrufen können soll.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Den gesamten Rest deines Postings hättest du dir sparen können, wenn du _hier_ deutlich gemacht hättest, was du unter einem "externen button" verstehst, wo der untergebracht ist, und warum der nun eine ganz spezielle Funktion des FCK-Editors aufrufen können soll.

      Also in dem Editor gibt es eine Toobar.
      Diese Toolbar lässt sich im Editor schließen und auch wieder öffnen.

      Weil ich einen Newsletter Skript erstelle möchte ich diese Toolbar
      je nach Newsletter (plain text / html), öffnen oder schließen.
      Nur bekomme ich die Funktion nicht angesprochen.

      Wahrscheinlich liegt es nun daran das dieser Editor in einem IFrame geöffnet wird und ich die Funktion nur deshalb nicht zu fassen bekomme.

      Ich finde nur nichts wie ich per javasript in ein
      iframe eingreife.

      parent.frame["nachricht___Frame"].document.getElementById( 'Collapsed' ).style.display = '' ;
       parent.frame["nachricht___Frame"].document.getElementById( 'Expanded' ).style.display = 'none' ;

      Das geht auch nicht.

      1. Lieber Kodi,

        parent.frame["nachricht___Frame"].document.getElementById( 'Collapsed' ).style.display = '' ;
        parent.frame["nachricht___Frame"].document.getElementById( 'Expanded' ).style.display = 'none' ;

        Das geht auch nicht.

        gibt es denn in Deinem Dokument ein parent.frame["nachricht___Frame"]? Was sagt die Fehlerkonsole Deines Browsers? Ach ja, mit welchem Browser testest Du denn?

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  3. Der FCKeditor hat die Angewohnheit, seine Funktionen im eigenen Scope aufzubewahren. Ich habe ihn bisher immer nur über JavaScript eingebunden, dort würde es etwa so funktionieren:

    var fcknew = new FCKeditor('...');
    ...
    fcknew.FCKToolbarSet.Collapse();

    Du mußt also nichts anderes tun, als das Editorobjekt zu referenzieren.

    Gruß, LX