Zum Inhalt springen

In Kickstarter eine Extention erstellen

Erstellt am 17. November 2011 · 11 Antworten · letzte Antwort am 12. Dezember 2011

Tags: PHP, Frage

tobli ·

Hallo,

danke erstmal für deine Antwort und bereits hilfreichen Tipps.
Punkt 3: habe ich etwas falsch beschreiben, aber du hast es richtig gedeutet. Habs im InstallTool gefunden udn entsprechende abgeändert, nun kann ich Änderungen an Dateien vornehmen.
Punkt 2: da bin ich nicht so ganz durchgestiegen: für die Query ist mir dies unter die Augen gekommen:

SELECTquery 	( 	$  	select_fields,
		$  	from_table,
		$  	where_clause,
		$  	groupBy = '',
		$  	orderBy = '',
		$  	limit = '' 
	)

ob dies allerdins passend ist, weiß ich nicht.
Punkt 1: habe nun die Ganzen echos mal entfernt, habe in etwa befürchtet dass dies so nicht geht.
Nun wäre ich erfreut, wenn du mir noch etwas bzgl. der Datenbankverbindung, Abfrage etc. helfen könntest.

  function main($content, $conf)    {
        return 'Hello World!<HR>
            
            // Datenbank verbinden
            include "../zugang.php.inc";

            $sql = "
            SELECT platz, verein, begegnungsanzahl, sieg, unentschieden, niederlage, spielpunkte, differenz, punkte FROM tabelle_damen1 ORDER BY platz";

            $db_erg = mysql_query( $sql );
            if ( ! $db_erg )
            {
            die('Ungültige Abfrage: ' . mysql_error()),
            }

            $anzahl = mysql_num_rows($db_erg);
            
            Test
            <table class=\"table_mannschaften_80\">
            <tr>
            <td>Platz</td>
            <td>Verein</td>
            <td>Begegnungen</td>
            <td>S</td>
            <td>U</td>
            <td>N</td>
            <td>Spiele</td>
            <td>+/-</td>
            <td>Punkte</td>
            </tr>
            
            
            $anzahl = 1
            while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
            {
            <tr>
            <td>'. $zeile['platz'] . '</td>
            <td>'. $zeile['verein'] . '</td>
            <td>'. $zeile['begegnungsanzahl'] . '</td>
            <td>'. $zeile['sieg'] . '</td>
            <td>'. $zeile['unentschieden'] . '</td>
            <td>'. $zeile['niederlage'] . '</td>
            <td>'. $zeile['spielpunkte'] . '</td>
            <td>'. $zeile['differenz'] . '</td>
            <td>'. $zeile['punkte'] . '</td>
            </tr>
            $anzahl+
            }
            </table>

            mysql_free_result( $db_erg )

            
            '.
                    t3lib_div::view_array($conf);
    }
Norman2k ·

Du brauchst dich in einer Extension nicht um die Verbindung zur Datenbank kümmern, das geht alles über den Core. Natürlich vorausgesetzt, dass du auf die TYPO3-DB zugreifen willst und nicht auf eine externe DB. Das würde dann mit DBAL gehen.

Abfrage:

<php
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select, $from, $where, $group, $order, $limit);
$anzahl = $GLOBALS['TYPO3_DB']->sql_num_rows($res)
while ($zeile = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
...
}
$GLOBALS['TYPO3_DB']->sql_free_result($res);
?>
tobli ·

Hallo,

die Inhalte sind in einer anderen DB, allerdings auf dem gleichen Server.
Meinst du dies hier? Oder muss da die Extetion DBAL isntalliert werden?

$TYPO3_CONF_VARS['EXTCONF']['dbal']['handlerCfg'] = array (
'_DEFAULT' => array (
'type' => 'native',
'config' => array(
'username' => '',        // Set by default (overridden)
'password' => '',        // Set by default (overridden)
'host' => '',            // Set by default (overridden)
'database' => '',        // Set by default (overridden)
)
),

Gruß Tobli

tobli ·

HAllo,

ich habe nun meine ext_localconfig.php der Extetion ein wenig umgebaut. Bin ich da auf dem richtigen Wege?

<?php

if (!defined ('TYPO3_MODE'))     die ('Access denied.');

$TYPO3_CONF_VARS['EXTCONF']['dbal']['handlerCfg'] = array (
         '_DEFAULT' => array (
             'type' => 'native',   
             'config' => array(
     'username' => 'datenbankbenutzer',         
                 'password' => '*****',         
                 'host' => 'localhost',             
                 'database' => 'typo3datenbank'      
             )
         ),
         'alternativeMySQLdb' => array (
             'type' => 'native',
             'config' => array(
                 'username' => 'datenbankbenutzer',          
                 'password' => '*****',          
                 'host' => 'localhost',          
                 'database' => 'extere_datenbankname',
                 'driver' =>'mysql'
         
             )
         ),
     );

$TYPO3_CONF_VARS['EXTCONF']['dbal']['table2handlerKeys'] = array (
         'stadt' => 'alternativeMySQLdb'
     );
    
t3lib_extMgm::addPItoST43($_EXTKEY, 'pi1/class.tx_damen1tabelle_pi1.php', '_pi1', 'CType', 1);
?>

Gruß Tobli

tobli ·

Hallo,

aktuell bekomme ich leider nur eine weiße Seite im Frontend angezeigt.

Das Protokoll in Typo3 zeigt:

Core: Error handler (BE): PHP Warning: is_file(): open_basedir restriction in effect. File(/var/www/virtual/???/htdocs/<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3DataStructure> <meta type="array"> <langDisable>1</langDisable> </meta> <ROOT type="array"> <tx_templavoila type="array"> <title>ROOT</title> <description>Wählen Sie das HTML-Element der Seite, das Sie als übergeordnetes Container-Element der Vorlage möchten.</description> </tx_templavoila> <type>array</type> <el type="array"> <field_ueberschrift type="array"> <tx_templavoila type="array"> <title>Überschrift</title> <sample_data type="array"> <numIndex index="0"></numIndex> </sample_data> <eType>input</eType> <tags>h3:inner</tags> <proc type="array"> <HSC type="integer">1</HSC> <stdWrap></stdWrap> </proc> <preview></preview> <TypoScript type="NULL"></TypoScript> </tx_templavoila> <TCEforms type="array"> <label>Überschrift</label> <config type="array"> <type>input</type> <size>48</size> <eval>trim</eval> </config> </TCEforms> </field_ueberschrift> <field_textzeile1 type="array"> <tx_templavoila type="array"> <title>Text Zeile 1</title> <sample_data type="array"> <numIndex index="0"></numIndex> </sample_data> <eType>input</eType> <tags>span:outer</tags> <proc type="array"> <HSC type="integer">1</HSC> <stdWrap></stdWrap> </proc> <preview></preview> <TypoScript type="NULL"></TypoScript> </tx_templavoila> <TCEforms type="array"> <label>Text Zeile 1</label> <config type="array"> <type>input</type> <size>48</size> <eval>trim</eval> </config> </TCEforms> </field_textzeile1> <field_textzeile2 type="array"> <tx_templavoila type="array"> <title>Text Zeile 2</title> <sample_data type="array"> <numIndex index="0"></numIndex> </sample_data> <eType>input</eType> <tags>span:outer</tags> <proc type="array"> <HSC type="integer">1</HSC> <stdWrap></stdWrap> </proc> <preview></preview> <TypoScript type="NULL"></TypoScript> </tx_templavoila> <TCEforms type="array"> <label>Text Zeile 2</label> <config type="array"> <type>input</type> <size>48</size> <eval>trim</eval> </config> </TCEforms> </field_textzeile2> <field_linktext1 type="array"> <tx_templavoila type="array"> <title>Linktext 1</title> <sample_data type="array"> <numIndex index="0"></numIndex> </sample_data> <eType>input</eType> <tags>a:inner</tags> <proc type="array"> <HSC type="integer">1</HSC> <stdWrap></stdWrap> </proc> <preview></preview> <TypoScript type="NULL"></TypoScript> </tx_templavoila> <TCEforms type="array"> <label>Linktext 1</label> <config type="array"> <type>input</type> <size>48</size> <eval>trim</eval> </config> </TCEforms> </field_linktext1> <field_linkurl1 type="array"> <type>attr</type> <tx_templavoila type="array"> <title>Linkurl 1</title> <sample_data type="array"> <numIndex index="0"></numIndex> </sample_data> <eType>link</eType> <tags>a:attr:href</tags> <TypoScript> 10 = TEXT 10.typolink.parameter.current = 1 10.typolink.returnLast = url</TypoScript> <proc type="array"> <HSC type="integer">1</HSC> <stdWrap></stdWrap> </proc> <preview></preview> </tx_templavoila> <TCEforms type="array"> <label>Linkurl 1</label> <config type="array"> <type>input</type> <size>15</size> <max>256</max> <checkbox></checkbox> <eval>trim</eval> <wizards type="array"> <_PADDING type="integer">2</_PADDING> <link type="array"> <type>popup</type> <title>Link</title> <icon>link_popup.gif</icon> <script>browse_links.php?mode=wizard</script> <JSopenParams>height=300,width=500,status=0,menubar=0,scrollbars=1</JSopenParams> </link> </wizards> </config> </TCEforms> </field_linkurl1> <field_linktext2 type="array"> <tx_templavoila type="array"> <title>Linktext 2</title> <sample_data type="array"> <numIndex index="0"></numIndex> </sample_data> <eType>input</eType> <tags>a:inner</tags> <proc type="array"> <HSC type="integer">1</HSC> <stdWrap></stdWrap> </proc> <preview></preview> <TypoScript type="NULL"></TypoScript> </tx_templavoila> <TCEforms type="array"> <label>Linktext 2</label> <config type="array"> <type>input</type> <size>48</size> <eval>trim</eval> </config> </TCEforms> </field_linktext2> <field_linkurl2 type="array"> <type>attr</type> <tx_templavoila type="array"> <title>Linkurl 2</title> <sample_data type="array"> <numIndex index="0"></numIndex> </sample_data> <eType>link</eType> <tags>a:attr:href</tags> <TypoScript> 10 = TEXT 10.typolink.parameter.current = 1 10.typolink.returnLast = url</TypoScript> <proc type="array"> <HSC type="integer">1</HSC> <stdWrap></stdWrap> </proc> <preview></preview> </tx_templavoila> <TCEforms type="array"> <label>Linkurl 2</label> <config type="array"> <type>input</type> <size>15</size> <max>256</max> <checkbox></checkbox> <eval>trim</eval> <wizards type="array"> <_PADDING type="integer">2</_PADDING> <link type="array"> <type>popup</type> <title>Link</title> <icon>link_popup.gif</icon> <script>browse_links.php?mode=wizard</script> <JSopenParams>height=300,width=500,status=0,menubar=0,scrollbars=1</JSopenParams> </link> </wizards> </config> </TCEforms> </field_linkurl2> </el> </ROOT> </T3DataStructure>) is not within the allowed path(s): (/var/www/virtual/???/:/usr/share/php/) in /var/www/virtual/???/htdocs/t3lib/class.t3lib_befunc.php line 947

Jemand eine Idee was da schief läuft?

Gruß Tobli

tobli ·

HAllo,

ich verzweifle so langsam: aktuell habe ich nur die class.tx_damen1tabelle_pi1.php verändert und alle anderen Dateien der Extention unverändert gelassen, allergins bekomme ich immer eine weiße Seite ausgegeben:

<?php
...
/**
 * Plugin 'Damen 1 Tabelle auslesen' for the 'damen1_tabelle' extension.
 *
 * @author    
 * @package    TYPO3
 * @subpackage    tx_damen1tabelle
 */
class tx_damen1tabelle_pi1 extends tslib_pibase {
    var $prefixId      = 'tx_damen1tabelle_pi1';        // Same as class name
    var $scriptRelPath = 'pi1/class.tx_damen1tabelle_pi1.php';    // Path to this script relative to the extension dir.
    var $extKey        = 'damen1_tabelle';    // The extension key.
    var $pi_checkCHash = true;
 
    /**
     * The main method of the PlugIn
     *
     * @param    string        $content: The PlugIn content
     * @param    array        $conf: The PlugIn configuration
     * @return    The content that is displayed on the website
     */
    function main($content, $conf)    {

        $extDB = t3lib_div::makeInstance('t3lib_DB');
        $extDB->debugOutput = $TYPO3_CONF_VARS['SYS']['sqlDebug'];
        $extDB->connectDB('localhost', 'db-name', 'pw', 'db-user');
 
        $res = $extDB->exec_SELECTquery('platz, verein, begegnungsanzahl, sieg,
            unentschieden, niederlage, spielpunkte, differenz,
            punkte', 'tabelle_damen1', NULL, 'platz');
        $anzahl = $extDB->sql_num_rows($res);

        $content = '<table class=\'table_mannschaften_80\'>
            <tr>
            <td>Platz</td>
            <td>Verein</td>
            <td>Begegnungen</td>
            <td>S</td>
            <td>U</td>
            <td>N</td>
            <td>Spiele</td>
            <td>+/-</td>
            <td>Punkte</td>
            </tr>';
 
        $anzahl = 1
        while ($zeile = mysql_fetch_array( $res, MYSQL_ASSOC))
        {
            $content .= '<tr>
                <td>'. $zeile['platz'] . '</td>
                <td>'. $zeile['verein'] . '</td>
                <td>'. $zeile['begegnungsanzahl'] . '</td>
                <td>'. $zeile['sieg'] . '</td>
                <td>'. $zeile['unentschieden'] . '</td>
                <td>'. $zeile['niederlage'] . '</td>
                <td>'. $zeile['spielpunkte'] . '</td>
                <td>'. $zeile['differenz'] . '</td>
                <td>'. $zeile['punkte'] . '</td>
                </tr>';
            $anzahl++;
        }
        $content .= '</table>';
 
        $extDB->sql_free_result($res);
 
        return $content;
    }
}
 
 
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/damen1_tabelle/pi1/class.tx_damen1tabelle_pi1.php'])    {
    include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/damen1_tabelle/pi1/class.tx_damen1tabelle_pi1.php']);
}
 
?>

Noch irgendwelche LÖsungen vorhanden?

Gruß Tobli

aemka ·

Stell dein php mal richtig ein, dass du Fehlermeldungen ausgegeben bekomsmt. Dann siehst du schnell, was los ist.

Ebenso in der localconf.php deine ip mal bei devipmask eintragen und sqldebug auf 1 stellen, dann erzählt dir typo3 auch alle Fehlerdetails.

tobli ·
aemka schrieb

Stell dein php mal richtig ein, dass du Fehlermeldungen ausgegeben bekomsmt. Dann siehst du schnell, was los ist.

Ebenso in der localconf.php deine ip mal bei devipmask eintragen und sqldebug auf 1 stellen, dann erzählt dir typo3 auch alle Fehlerdetails.

Hallo,

in der localconfig.php in der typo3 config? Dort habe ich keinen Eintrag von devipmask und sqldebug gefunden.

Ich habe nun festgestellt, dass ich ein ; vergessen hatte. Nun klappt die Abfrage und auch die Verbindung.

Ich habe nun eine weitere Abfrage probiert, allerdings scheint hier etwas nicht zu passen.

$sql = "
SELECT id, wochentag, spielzeit, spielklasse, heimmannschaft, gastmannschaft, heimergebnis, gastergebnis FROM spielergebnisse WHERE heimmannschaft NOT LIKE '%spielfrei%' AND gastmannschaft  NOT LIKE '%spielfrei%' ORDER BY spielzeit";
$res = $extDB->exec_SELECTquery('id, wochentag, spielzeit, spielklasse,
            heimmannschaft, gastmannschaft, heimergebnis,
            gastergebnis', 'spielergebnisse', 'heimmannschaft NOT LIKE spielfrei AND gastmannschaft NOT LIKE spielfrei', 'spielzeit');