Ergebnis 1 bis 7 von 7

Thema: Anleitung autocomplete

  1. #1
    Contao-Nutzer
    Registriert seit
    12.03.2012.
    Ort
    Dresden
    Beiträge
    229

    Standard Anleitung autocomplete

    hallo,

    ich hoffe, ich bin im richtigen forum, denn meine frage ist etwas "extensionübergreifend".

    ich möchte in einem eigenen modul einem textfeld das autocomplete hinzufügen. ich habe sowohl die extension von leo unglaub probiert als auch das autocompletePlugin + ajax.php vo andreas schempp.
    mir ist bei beiden nicht klar, wie ich das konkret einbinden muss und nirgendwo konnte ich eine konkrete anleitung finden.

    ich habe mir die auto-complete-funktion von harald kirschner vorgenommen und in mein modul integriert und alles funktioniert. allerdings steh ich nun wie leo auch irgendwann in seinem testmodul "lu_auto_completer" vor dem problem, dass im php script die contao-funktionalität fehlt, will heissen, ich muss dort erneut und ohne contao-api eine db-verbindung herstellen usw. und dort weiss ich nicht weiter.

    folgenden code hab ich momentan:

    in meiner config.php hab ich die plugindateien eingebunden (autocompleterPlugin):
    PHP-Code:
    $GLOBALS['TL_JAVASCRIPT']['autocompleter.observer'] = 'plugins/autocompleter/js/ac_compress.js';
    $GLOBALS['TL_CSS'][] = 'plugins/autocompleter/css/auto_completer.css'
    in meinem template der javascript-aufruf und das formular mit dem suchfeld:
    PHP-Code:
    <script type="text/javascript">
    document.addEvent('domready', function() {
        var inputWord = $('ctrl_titlefor');
        new Autocompleter.Request.HTML(inputWord, '{{env::path}}/system/modules/testmodul/script.php', {
            'indicatorClass': 'autocompleter-loading' // class added to the input during request
        }); 
    });
    </script>
    <form action="" method="get">
    <input type="text" name="titlefor" id="ctrl_titlefor" class="text" value="<?php echo $this->titlefor?>">
    ...
    und meine script.php:
    PHP-Code:
    $search stripslashes(strip_tags($_POST['value']));
     
    if (
    is_string($search) )
    {
        
    $connection=mysql_connect('localhost''user''password') or die
            (
    "Verbindungsversuch fehlgeschlagen");
        
        
    mysql_select_db('contaodb'$connection) or die("Konnte die Datenbank nicht waehlen.");
        
            
    $sql "SELECT name FROM tl_tabelle WHERE name LIKE '".mysql_real_escape_string($search)."%'";
        
    $query mysql_query($sql) or die("Anfrage nicht erfolgreich");
        
            
    $words=array();
            while (
    $result mysql_fetch_row($query)) {
            
    $words[]= $result[0];
            }
    }
     
    foreach (
    $words as $word)
    {
        echo 
    "<li>$word</li>";

    mir ist klar, dass die script.php in das contao-framework integriert werden muss und dort komme ich nicht weiter. kann mir da jemand helfen?
    danke und viele grüße
    silvia

  2. #2
    Contao-Nutzer
    Registriert seit
    12.03.2012.
    Ort
    Dresden
    Beiträge
    229

    Standard

    erstmal danke für deine antwort und sorry für den "müll".
    mein problem ist ja, dass ich mit den vorhandenen plugins nicht klar gekommen bin und daher erstmal das grundscript von harald kirscher ausprobiert habe, um zu sehen, wo mein denkfehler ist. also ohne contao-framework.

    ich meine, das so ähnlich auch bei dir in deinem testmodul gesehen zu haben und in diesem thread hattest du eine ähnliche frage gestellt:
    https://www.contao-community.de/show...highlight=ajax
    aber da gab es auch keine antwort, die mir geholfen hätte.

    nach weiterem langen testen und dank deiner nochmaligen erklärung funktioniert es nun endlich, vielen dank.

    eine frage noch: funktionieren auch mehrere solcher suchfelder in einem formular?
    wie müsste ich das objekt dann erstellen?
    in meinem frontendmodul habe ich ein formular mit 2 texteingabefeldern, in einem kann man nach einem namen und in einem zweiten feld nach dem ort suchen. beide möchte ich nun mit autocomplete vervollständigen. und das erste funktioniert jetzt.

    hier nochmal meine schrittfolge für das einfache suchfeld, vielleicht hilft es ja auch jemand anderem.

    in der config.php des moduls registriere ich den hook:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['getAutoCompleterChoices'][] = array('AcTestSearch''getChoices'); 
    in der compile()-funktion meines frontend-moduls erstelle ich das autocompleter objekt:
    PHP-Code:
    $objAutoCompleter = new AutoCompleter();
    $objAutoCompleter->formId 'ctrl_keywords';
    $objAutoCompleter->minLength '1';
    $objAutoCompleter->width 'inherit';
    $objAutoCompleter->maxChoices '10';
    $objAutoCompleter->zIndex '35';
    $objAutoCompleter->delay '400';
    $objAutoCompleter->generate(); 
    in meinem template habe ich das sucheingabefeld:
    PHP-Code:
    <input type="search" name="keywords" id="ctrl_keywords" class="text" value="<?php echo $this->defaultValue?>" onblur="if(this.value == '') { this.value='<?php echo $this->defaultValue?>'}" onfocus="if (this.value == '<?php echo $this->defaultValue?>') {this.value=''}">
    in der AcTestSearch.php die abfrage in der funktion getChoices()
    PHP-Code:
    public function getChoices()
        {
            
    $this->import('Database');
            
    $intAcid str_replace('ctrl_keywords'''$this->Input->get('acid'));

            
    $arrWhere = array();
            
    $arrValues = array();

            
    $arrWhere[] = 'keyword LIKE ?';
            
    $arrValues[] = '%' strtolower($this->Input->post('value')) . '%';

            
    // get all keywords from the database
            
    $objKeyword $this->Database->prepare('SELECT DISTINCT keyword FROM tl_keywords WHERE ' implode(' AND '$arrWhere) . ' ORDER BY   keyword DESC')
                ->
    limit(10)
                ->
    executeUncached($arrValues);

            if (
    $objKeyword->numRows 0)
            {
                return 
    $objKeyword->fetchEach('keyword');
            }
        }


    dann hab ich noch die css von harald kirschner eingebunden und das wars.
    korrigier mich, wenn ich wieder was falsches geschrieben hab.
    viele grüße
    silvia

  3. #3
    Contao-Nutzer
    Registriert seit
    12.03.2012.
    Ort
    Dresden
    Beiträge
    229

    Standard

    super, vielen dank. jetzt hab ich alles, wie ich es wollte.
    vielleicht ist es ja hilfreich, wenn ich mal ein kleines tutorial zu dem thema erstelle? denn ich könnte mir vorstellen, dass dies für einige hilfreich wäre.
    viele grüße
    silvia

  4. #4
    Contao-Fan Avatar von Nikolas
    Registriert seit
    22.08.2009.
    Ort
    Lehe
    Beiträge
    493
    User beschenken
    Wunschliste

    Standard

    Hallo landzone,

    könntest du kurz schildern wie du mehrere Autocompleter letztendlich in ein Formular untergebracht hast?
    Ich bekomm das irgendwie nicht hin.

    Gruß
    Nikolas

  5. #5
    Contao-Nutzer
    Registriert seit
    12.03.2012.
    Ort
    Dresden
    Beiträge
    229

    Standard

    im frontendmodul generiere ich 2 autocompleter-objekte:
    PHP-Code:
     // create the new Auto Completer object
        
    $objAutoCompleter_title = new AutoCompleter();
        
    $objAutoCompleter_title->formId 'ctrl_titlefor';
        
    $objAutoCompleter_title->generate();
             
        
    // create the new Auto Completer object
        
    $objAutoCompleter_location = new AutoCompleter();
        
    $objAutoCompleter_location->formId 'ctrl_locationfor';
        
    $objAutoCompleter_location->generate(); 
    im template habe ich zwei sucheingabefelder:
    PHP-Code:
    <input type="search" name="titlefor" id="ctrl_titlefor" class="text" value="<?php echo $this->titlefor?>">
    <br />
    <input type="search" name="locationfor" id="ctrl_locationfor" class="text" value="<?php echo $this->locationfor?>">
    und in der getChoices() funktion frage ich nach der id des suchfeldes ab:
    PHP-Code:
    if($this->Input->get('acid') == 'ctrl_titlefor'
            {
                
    $arrTitleWhere = array();
                
    $arrTitleValues = array();
                
                ....

            }
            
            if(
    $this->Input->get('acid') == 'ctrl_locationfor'
                    {
                            ....
                    }
            { 
    soweit in aller kürze, hoffe, das hilft.
    viele grüße
    silvia

  6. #6
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard

    Ich kriegs trotz der Anleitung nicht hin, kann bitte mal jemand eine Beispiel-Erweiterung hochladen?
    Oder liegt es an Contao 3?
    Geändert von Stranger (06.09.2013 um 00:16 Uhr)
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  7. #7
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.150

    Standard

    Könntest du auch sagen wo du welche Datein hingepackt hast?

    Komme hier mit nicht so richtig klar

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

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