Zum Inhalt springen

dmmjobcontrol - keine Suche nach Kategorie oder Region/Ort möglich

Erstellt am 10. Januar 2015 · 2 Antworten · letzte Antwort am 11. Januar 2015

Tags: PHP, TYPO3 6, Frage

Emanuel2204 ·

Hi!

Verwende Typo3 6.2.9 und die Extension dmmjobcontrol in der aktuellen Version. Leider kann ich nicht nach Kategorie oder Region/Ort suchen. Die Suche nach Stichwort liefert mir Ergebnisse. Bei Suche nach Kategorie oder Region/Ort (beides DropDown-Felder) liefert die Suche keine Ergebnisse.

Kann es sein, dass der Fehler in folgender Funktion liegt?:

 function getFormSelect($field) {
        global $TCA;

        $session = $GLOBALS['TSFE']->fe_user->getKey('ses', $this->prefixId);

        if (isset($this->conf['multipleselect.'][$field]) && $this->conf['multipleselect.'][$field] != 1) {
            $multiple = ' multiple="multiple" size="'.$this->conf['multipleselect.'][$field].'"';
        } else {
            $multiple = '';
        }

        $return = '<select name="tx_dmmjobcontrol_pi1[search]['.$field.'][]" class="dmmjobcontrol_select dmmjobcontrol_'.$field.'"'.$multiple.'>';
        if ($multiple == '') {
            $return .= '<option value="-1">'.$this->pi_getLL('form_select_text').'</option>';
        }

        if (isset($TCA['tx_dmmjobcontrol_job']['columns'][$field]['config']['MM'])) {
            // The values for the select come from another table
            $whereAdd = 'pid IN ('.implode(',', $this->sysfolders).')';
            $whereAddLang = ' AND sys_language_uid='.$GLOBALS['TSFE']->sys_language_content;
            $sort = $this->conf['sort.'][$field] ? $this->conf['sort.'][$field] : ($this->conf['property_sort'] ? $this->conf['property_sort'] : 'name ASC');

            $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid, name', $TCA['tx_dmmjobcontrol_job']['columns'][$field]['config']['foreign_table'], $whereAdd.$whereAddLang, '', $sort);
            while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
                $selected = '';
                if (isset($session['search'][$field]) && in_array($row['uid'], $session['search'][$field])) {
                    $selected = ' selected="selected"';
                }

                $return .= '<option value="'.$row['uid'].'"'.$selected.'>'.$row['name'].'</option>';
            }
        } elseif (is_array($TCA['tx_dmmjobcontrol_job']['columns'][$field]['config']['items'])) {
            // The values are in $TCA
            foreach ($TCA['tx_dmmjobcontrol_job']['columns'][$field]['config']['items'] AS $row) {
                $selected = '';
                if (isset($session['search'][$field]) && in_array($row[1], $session['search'][$field])) {
                    $selected = ' selected="selected"';
                }

                $return .= '<option value="'.$row[1].'"'.$selected.'>'.$GLOBALS['TSFE']->sL($row[0]).'</option>';
            }
        }

        $return .= '</select>';

        if ($this->conf['show_icon'] && $selected == ' selected="selected"') {
            $return .= '<img class="dmmjobcontrol_selected_icon" src="typo3conf/ext/'.$this->extKey.'/icon_tx_dmmjobcontrol_arrow.gif" alt="" title="selected">';
        }

        return $return;
    }

Oder an der übergeordneten Funktion?:

function getFormData() {
        $markerArray['###FORM_ATTRIBUTES###'] = ' action="'.$this->cachedLinkToPage($this->conf['pid.']['list']?$this->conf['pid.']['list']:$GLOBALS['TSFE']->id).'" method="post" ';
        $markerArray['###SECTOR_SELECT###'] = $this->getFormSelect('sector');
        $markerArray['###REGION_SELECT###'] = $this->getFormSelect('region');
        $markerArray['###CATEGORY_SELECT###'] = $this->getFormSelect('category');
        $markerArray['###DISCIPLINE_SELECT###'] = $this->getFormSelect('discipline');
        $markerArray['###EDUCATION_SELECT###'] = $this->getFormSelect('education');
        $markerArray['###CONTRACT_TYPE_SELECT###'] = $this->getFormSelect('contract_type');
        $markerArray['###JOB_TYPE_SELECT###'] = $this->getFormSelect('job_type');
        $markerArray['###SEARCH_NAME###'] = 'tx_dmmjobcontrol_pi1[search_submit]';
        $markerArray['###RESET_NAME###'] = 'tx_dmmjobcontrol_pi1[reset_submit]';
        $markerArray['###KEYWORD_NAME###'] = 'tx_dmmjobcontrol_pi1[search][keyword]';

        $session = $GLOBALS['TSFE']->fe_user->getKey('ses', $this->prefixId);
        $markerArray['###KEYWORD_VALUE###'] = htmlspecialchars($session['search']['keyword'], ENT_QUOTES);

        // Extend the markerArray with user function?
        if (isset($this->conf['searchArrayFunction']) && $this->conf['searchArrayFunction']) {
            $funcConf = $this->conf['searchArrayFunction.'];
            $funcConf['parent'] = & $this;
            $markerArray = $this->cObj->callUserFunction($this->conf['searchArrayFunction'], $funcConf, $markerArray);
        }

        return $markerArray;
    }

###KEYWORD_VALUE### funktioniert. ###CATEGORY_SELECT### z.B. nicht.
Danke für eure Hilfe!

Emanuel2204 ·

Ich vermute das liegt nicht an obiger Funktion. Es liegt glaub ich eher an folgenden Zeilen:

// Get categories
        $resMM = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query('tx_dmmjobcontrol_category.*', '', 'tx_dmmjobcontrol_job_category_mm', 'tx_dmmjobcontrol_category', 'AND tx_dmmjobcontrol_job_category_mm.uid_local='.$row['uid']);
        $array = array();
        while($rowMM = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($resMM)) {
            $array[] = $rowMM['name'];
        }

Hat TYPO3 6.2.9 irgendein Problem mit "exec_SELECT_mm_query"??

Emanuel2204 ·

Ich komme der Sache schon näher. Im TYPO3 Backend Protokoll habe ich gesehen dass die Datei dmmjobcontrol/pi1/class.tx_dmmjobcontrol_pi1.php in Zeile 255 den Fehler verursacht.
Die besagte Zeile ist folgende:

$whereAdd[] = $table.'.uid_local=tx_dmmjobcontrol_job.uid AND ('.$table.'.uid_foreign='.implode(' OR '.$table.'.uid_foreign=', intval($value)).')';

Der größere Abschnitt ist

// If there is a search-session, then extend the query arrays to make the search (but not for rss feeds of course)
        if (!$this->rssMode && !$this->conf['ignore_search']) {
            $session = $GLOBALS['TSFE']->fe_user->getKey('ses', $this->prefixId);
            if (isset($session['search']) && $search = $session['search']) {

                foreach ($search AS $field => $value) {
                    if (is_array($value) && count($value) == 1 && current($value) == -1) {
                        continue;
                    }

                    if (isset($TCA['tx_dmmjobcontrol_job']['columns'][$field]['config']['MM'])) {
                        $table = $TCA['tx_dmmjobcontrol_job']['columns'][$field]['config']['MM'];
                        $tableAdd[] = $table;
                        $whereAdd[] = $table.'.uid_local=tx_dmmjobcontrol_job.uid AND ('.$table.'.uid_foreign='.implode(' OR '.$table.'.uid_foreign=', intval($value)).')';
                    } elseif ($field == 'keyword') {
                        $keywords = str_replace(array(','), ' ', $value);
                        $keywords = explode(' ', $keywords);

                        foreach ($keywords AS $keyword) {
                            $keyword = addslashes($keyword);

                            $whereAdd[] = '(tx_dmmjobcontrol_job.job_title LIKE "%'.$keyword.'%" OR '.
                            'tx_dmmjobcontrol_job.job_description LIKE "%'.$keyword.'%" OR '.
                            'tx_dmmjobcontrol_job.location LIKE "%'.$keyword.'%" OR '.
                            'tx_dmmjobcontrol_job.reference LIKE "%'.$keyword.'%" OR '.
                            'tx_dmmjobcontrol_job.job_requirements LIKE "%'.$keyword.'%")';
                        }
                    } elseif (isset($TCA['tx_dmmjobcontrol_job']['columns'][$field])) {
                    // !!!
                    // listQuery doesn't do IN statement
                    // !!!
                    $value = current($value);
                        $selectAdd[] = 'tx_dmmjobcontrol_job.'.$field.' AS '.$field;
                        $whereAdd[] = $GLOBALS['TYPO3_DB']->listQuery($field, $value, 'tx_dmmjobcontrol_job');
                    } else {
                        continue;
                    }
                }
            }
        }

Der Fehler lautet: Core: Error handler (FE): PHP Warning: implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in /typo3conf/ext/dmmjobcontrol/pi1/class.tx_dmmjobcontrol_pi1.php line 255