+ Antworten
Ergebnis 1 bis 6 von 6

Thema: Wie muss ich eine Komp. schreiben, bei denen Mambots funktionieren?

  1. #1
    War schon öfter hier
    Registriert seit
    24.01.2006
    Ort
    Nordkirchen
    Alter
    44
    Beiträge
    182
    Bedankte sich
    57
    Erhielt 6 Danksagungen
    in 6 Beiträgen

    Standard Wie muss ich eine Komp. schreiben, bei denen Mambots funktionieren?

    Hallo @all,

    ich will eine Komponente schreiben, wobei auch Mambots zu Einsatz kommen sollen.
    Alle bisherigen Versuche scheiterten.

    Frage:
    - Wer kann mir Beispielprojekte nennen, bei denen ich abkupfern kann
    - Wer kennt vielleicht ein How-To-Do oder andere Quellcodefragmente, in denen beschrieben wird wie's geht
    - Wie cache ich den Komponentencontent so, dass Mambots darauf zugreifen können

    ... Danke!
    :-) Michael

  2. #2
    Wohnt hier Avatar von Phil_K
    Registriert seit
    19.09.2005
    Ort
    Münster
    Alter
    38
    Beiträge
    3.435
    Bedankte sich
    27
    Erhielt 955 Danksagungen
    in 865 Beiträgen

    Standard

    Moin.

    Zitat Zitat von bastian1 Beitrag anzeigen
    Frage:
    - Wer kann mir Beispielprojekte nennen, bei denen ich abkupfern kann
    /components/com_content/content.html.php

    - Wer kennt vielleicht ein How-To-Do oder andere Quellcodefragmente, in denen beschrieben wird wie's geht
    Dev. Seite unter joomla.org würde ich annehmen.

    - Wie cache ich den Komponentencontent so, dass Mambots darauf zugreifen können
    Indem Du sicherstellst das alle Ausgaben der Komponente irgendwie in einer Variabeln landen und nicht direkt ausgegeben werden.

    com_content verwendet in der Funktion show() z.B. die Zeilen:

    PHP-Code:
    global $_MAMBOTS;
    ...
    $_MAMBOTS->loadBotGroup'content' );
    $results $_MAMBOTS->trigger'onPrepareContent', array( &$row, &$params$page ), true ); 
    Mit loadBotGroup wird die für diese Komponente relevante Botgruppe geladen / initialisiert, mit der nächsten Zeile der gewünschte Trigger ausgelöst. $row enthält
    dabei die Daten die show() übergeben bekommen hat.

    Gruss
    Phil.
    CBE-Beta1-1/2 sv0.702
    (deutsche Sprachdateien incl.)
    ( FAQ im Aufbau )

  3. Erhielt Danksagungen von:


  4. #3
    War schon öfter hier
    Registriert seit
    24.01.2006
    Ort
    Nordkirchen
    Alter
    44
    Beiträge
    182
    Bedankte sich
    57
    Erhielt 6 Danksagungen
    in 6 Beiträgen

    Standard

    Hi Phil_K,
    ein kleines Verständnisploblem.
    Bot ist installiert und aktiv.

    Hier Quellcode aus der Komponente:
    PHP-Code:
    <?php
    // This line secures your component by making sure that Mambo
    // and only Mambo is calling this file.
    defined'_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

    // load the html drawing class
    require_once($mainframe->getPath('front_html'));
    require_once(
    $mainframe->getPath('class'));

    $selpage trim(mosGetParam($_REQUEST'selpage'0));
    $pageid trim(mosGetParam($_REQUEST'pageid'0));

    switch(
    $task) {
        case 
    'loadPage':
            [
    COLOR="red"]$content [/COLOR]= showMyPages($option$selpage);
            break;
        default:
            [
    COLOR="Red"]$content [/COLOR]= showMyPages($option);
            break;
    }


    [
    B]$_MAMBOTS->loadBotGroup'content' );[/B]
    [
    B]$results $_MAMBOTS->trigger[/B]( 'onPrepareContent', array( &[COLOR="red"]$content[/COLOR], &$params$page ), true );

    function 
    showMyPages($option$selpage "") {
        global 
    $database$my;
    ....
    Muss ich den Trigger in der Komponente oder im Bot einbauen???
    In meinem beispiel habe ich den rigger in der Kom. eingebaut.
    ... wahrscheinlich falsch, wie?

    Hier Quellcode aus dem Bot:
    PHP-Code:
    defined'_VALID_MOS' ) or die( 'Restricted access' );

    $_MAMBOTS->registerFunction'onPrepareContent''botPrivTemplate' );

    /**
    */
    function botPrivTemplate$str=NULL ) {
        global 
    $database$my;

             
    // define the regular expression for the bot
             
    $regex '/{josprivcontent}/i';

             
    // hier wird entschieden ob die Menüstruktur oder der reine Content angezeigt wird */
        
    if ( $_REQUEST[privpageid] > -)
        {
             
    $content preg_replace_callback($regex'botPrivContent'$str);
        } else {
             
    $content preg_replace_callback($regex'botPrivMenu'$str);
             }
             return 
    $content;

    }

    /*
     * Menu der Private Page wird gebaut
     */
    function botPrivMenu()
    ... 

  5. #4
    Wohnt hier Avatar von Phil_K
    Registriert seit
    19.09.2005
    Ort
    Münster
    Alter
    38
    Beiträge
    3.435
    Bedankte sich
    27
    Erhielt 955 Danksagungen
    in 865 Beiträgen

    Standard

    Moin.

    Zitat Zitat von bastian1 Beitrag anzeigen
    Hi Phil_K,
    Muss ich den Trigger in der Komponente oder im Bot einbauen???
    Im Moment iritiert mich die Stelle an der Du die _MAMBOT eingebaut hast, da sie zwischen der SWITCH und einer Funktionsdeklaration stehen. Kommt hinter der Funktion noch ein "normaler" Flow von PHP Befehlen? Btw, im Feldzitat PHP werden
    Hervorhebungen und Farben nicht angewendet, es wäre besser Du entfernst Du oder machst aus den PHP Einfassungen nur CODE Blöcke.

    Ansonsten... Beides.
    Der Bot muss den Trigger 'onPrepareContent' bedienen und die Komponente muss die passende BotGruppe laden und den Trigger auch anwenden.

    Mit
    PHP-Code:
    $_MAMBOTS->registerFunction'onPrepareContent''botPrivTemplate' ); 
    sorgt der Mambot dafür das Joomla ihn beim Aufruf des Triggers onPrepareContent
    berücksichtigt und weiss das dann aus diesem Bot die Funktion botPrivTemplate
    aufgerufen und mit Daten gefüttert werden soll.

    Und mit
    PHP-Code:
    $_MAMBOTS->trigger'onPrepareContent', ..... 
    sagt die Komponente dem JoomlaFramework das jetzt doch bitte alle Bots die sich für den Trigger onPrepareContent interessieren angewendet werden sollen. Wenn das
    BotLoad nicht zum Trigger passt würde z.B. nichts passieren.

    Die Frage bei Deinem Bot ist, für welche BotGruppe lässt Du ihn im xml File einbinden,
    da Du hier "content" laedst sollte er auch dazu gehören.

    Gruss
    Phil.
    CBE-Beta1-1/2 sv0.702
    (deutsche Sprachdateien incl.)
    ( FAQ im Aufbau )

  6. #5
    War schon öfter hier
    Registriert seit
    24.01.2006
    Ort
    Nordkirchen
    Alter
    44
    Beiträge
    182
    Bedankte sich
    57
    Erhielt 6 Danksagungen
    in 6 Beiträgen

    Standard

    Hi Phil_K,

    hier nochmal alle Files.
    Folgenden Out erhalte ich:
    Code:
    privcont Object
    (
        [id] => 0
        [content] => <form action="index.php" method="post" name="adminForm">
    <input type="hidden" name="task" value="default">
    <input type="hidden" name="option" value="com_privatepage">
    <input type="hidden" name="pageid" value="1">
    <input type="hidden" name="myid" value="63">
    <input type="hidden" name="privpageid" value="">
    <script language="javascript" type="text/javascript">
    function submitbutton(pressbutton,id) {
    		if ( id ) { document.adminForm.privpageid.value = id; }
    		var form = document.adminForm;
                 if (pressbutton == "loadPage") {
    			submitform(pressbutton);
    		}
    }
    </script>
    <table width="100%"><tr><td><font face="Arial" size="3"><p>{josprivcontent}</p></font></td></tr>
    </table></form>
    )
    	Array


    Komponente: privatepage.php
    PHP-Code:
    defined'_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

    // load the html drawing class
    require_once($mainframe->getPath('front_html'));
    require_once(
    $mainframe->getPath('class'));

    //print_r($mainframe);

    $selpage trim(mosGetParam($_REQUEST'selpage'0));
    $pageid trim(mosGetParam($_REQUEST'pageid'0));

    switch(
    $task) {
        case 
    'loadPage':
            echo 
    showMyPages($option$selpage);
                             break;
        default:
            echo 
    showMyPages($option);
                             break;
    }



    class 
    privCont {
        var 
    $id 0;
        var 
    $content NULL;
        function 
    privCont($arg)
             {
                 
    $this->content $arg;
             }
    }

    function 
    showMyPages($option$selpage "") {
        global 
    $database$my$_MAMBOTS;

             
    $content "";

        
    $getprivs 1;

        if (
    count($getprivs) == 1) {
            
    $privs $getprivs;

            
    $database->setQuery("SELECT * FROM #__privatepages where userid = $my->id
                           and published = 1 order by submitdate desc"
    );
            
    $rows $database->loadObjectList();

            
    $whichpage $rows[0];
            if (
    strlen($selpage)) {
                foreach (
    $rows as $page) {
                    if (
    $page->id == $selpage) {
                        
    $whichpage $page;
                    }
                }
            }

            
    $pageid $whichpage->id;

            
    $content .= HTML_privatepages::startForm($option$pageid$whichpage->title);
            
    $content .= HTML_privatepages::showPrivatePage($whichpage);
            
    $content .= HTML_privatepages::endForm($option);

        } else {
            
    $content .= HTML_privatepages::showDenied();
        }

             
    $cont = new privCont($content);
             
    print_r($cont);
        
    $_MAMBOTS->loadBotGroup'content' );
        
    $results $_MAMBOTS->trigger'onPrepareContent', array( &$cont, &$params$page ) );

             return 
    $results;


    Komponente: privatepage.html.php
    PHP-Code:
    class HTML_privatepages {

          function 
    startTable() {
                
    $ret "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"99%\"><tr>\n";
                return 
    $ret;
          }

          function 
    endTable() {
                
    $ret "</tr></table>\n";
                return 
    $ret;
          }


        function 
    startForm($option$pageid = -1$title "") {

             global 
    $my;

                
    $ret "<form action=\"index.php\" method=\"post\" name=\"adminForm\">\n";
                
    $ret .= "<input type=\"hidden\" name=\"task\" value=\"default\">\n";
                
    $ret .= "<input type=\"hidden\" name=\"option\" value=\"".$option."\">\n";
                
    $ret .= "<input type=\"hidden\" name=\"pageid\" value=\"".$pageid."\">\n";
                
    $ret .= "<input type=\"hidden\" name=\"myid\" value=\"".$my->id."\">\n";
                
    $ret .= "<input type=\"hidden\" name=\"privpageid\" value=\"\">\n";
                
    $ret .= "<script language=\"javascript\" type=\"text/javascript\">\n";
                
    $ret .= "function submitbutton(pressbutton,id) {\n";
                
    $ret .= "        if ( id ) { document.adminForm.privpageid.value = id; }\n";
           
    $ret .= "        var form = document.adminForm;\n";
                
    $ret .= "             if (pressbutton == \"loadPage\") {\n";
           
    $ret .= "            submitform(pressbutton);\n";
           
    $ret .= "        }\n";
                
    $ret .= "}\n";

                
    $ret .= "</script>\n";
                return 
    $ret;
        }

        function 
    endForm() {
            
    $ret "</form>";
                     return 
    $ret;
        }



        function 
    showPrivatePage(&$page) {

            
    $ret "<table width=\"100%\">";

            if (!
    is_object($page)) {
                
    $ret .= "<tr><td><b>You have no private page(s).</b></td></tr>\n";
            } else {
                
    $ret .= "<tr><td>".$page->content."</td></tr>\n";
            }
            
    $ret .= "</table>";
                     return 
    $ret;
        }

        function 
    showDenied($message "") {
                 
    $ret "";
            if (
    strlen($message)) {
                
    $ret .= "<b>" $message "</b>\n";
            } else {
                
    $ret .= "<b>No private page(s) available for viewing.</b>\n";
            }
                     return 
    $ret;
        }


    Mambot:
    PHP-Code:
    defined'_VALID_MOS' ) or die( 'Restricted access' );

    $_MAMBOTS->registerFunction'onPrepareContent''botPrivTemplate' );

    /**
    */
    function botPrivTemplate$str=NULL ) {
        global 
    $database$my;

             
    // define the regular expression for the bot
             
    $regex '/{josprivcontent}/i';

             
    // hier wird entschieden ob die Menüstruktur oder der reine Content angezeigt wird */
        
    if ( $_REQUEST[privpageid] > -)
        {
             
    $content preg_replace_callback($regex'botPrivContent'$str);
        } else {
             
    $content preg_replace_callback($regex'botPrivMenu'$str);
             }
             return 
    $content;

    }


    /*
     * Menu der Private Page wird gebaut
     */
    function botPrivMenu()
    {
        global 
    $database$my;

             
    $query "SELECT * FROM #__privatepages_content "
             
    ."WHERE userid = ".$my->id
             
    .";";

             
    $database->setQuery$query );
             
    $data    $database->loadObjectList();

             
    $repl "<table>\n";
             for ( 
    $i 0$i count($data); $i++ )
             {

             
    /* pflügt die params auseinander */
                 
    $params divideParams($data[$i]->params);

                 
    $target "";
                 
    $href   "javascript:submitbutton('loadPage',".$data[$i]->id.")";

                     
    // -> wenn _blank Link
                 
    if ( isset($params[url]) )
                 {
                     
    $target " target=\"".$params[target]."\"";
                         
    $href   $params[url];
                 }

             
    $repl .= "<tr><td><a ".$target." href=\"".$href."\">".$data[$i]->title."</a></td></tr>\n";


             }
             
    $repl .= "</table>\n";

             return 
    $repl;
    }


    /*
     * Inhalte der Menüeintrage werden generiert
     */
    function botPrivContent()
    {
        global 
    $database$my$mosConfig_absolute_path;
             
    $query "SELECT * FROM #__privatepages_content "
             
    ."WHERE userid = ".$my->id
             
    ." AND id = ".$_REQUEST[privpageid]
             .
    ";";

             
    $database->setQuery$query );
             
    $data    $database->loadObjectList();


             
    /* suche nach {} im content */
             
    if ( ereg("[{]",$data[0]->content) )
             {

             
    /* {} entfernen */
             //$regBot = ereg_replace("[\{|\}]","",$data[0]->content);
             /* datei includieren */
             //include ( $mosConfig_absolute_path."/components/com_privatepage/".$regBot.".php");
             /* uebergebe den Return der Funktion der variable */
             //$content = preg_replace_callback($data[0]->content, $regBot, ereg_replace("[\{|\}]","",$data[0]->content));
             
    $content $data[0]->content;


             } else {
                     
    /* uebergebe dem Content den Inhalt */
                 
    $content $data[0]->content;
                 }


             
    $repl "<table>\n";
             
    $repl .= "<tr><td>".$content."</td></tr>\n";
             
    $repl .= "<tr><td><a href=\"javascript:submitbutton('loadPage',-1)\">zurück</a></td></tr>\n";
             
    $repl .= "</table>\n";


             return 
    $repl;
    }



    function 
    divideParams($params)
    {
        
    // [params] => nlcode|10079;aindex|3548;target|_blank;url|https://www.persona.de/kummulator/startb.php;
        
    $arr split("[;]",$params);
             for ( 
    $i 0$i count($arr); $i++ )
             {
                 list(
    $k,$v) = explode("|",$arr[$i]);
                     
    $repl[$k] = $v;
             }
             return 
    $repl;

    Irgendwas mache ich noch falsch, denn vorher lief alles in der Komponente.
    Das DataMining funzte und die Substitution klappte prima.
    Jetzt möchte ich per {xxxx} beliebig viele Bots über die Komp. setzen.
    Das ist mein Ziel.
    Bitte sei so nett und schau nochmal drüber. Mein latain ist zu Ende.

    Danke im Voraus.

    :-) Michael

  7. #6
    Neu an Board
    Registriert seit
    29.04.2008
    Beiträge
    2
    Bedankte sich
    0
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Entschuldigung, jetzt habe ich noch im falschen Thema gepostet!

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein