Luc: Google Sitesearch mit variabler URL

Hallo zusammen

Für ein Produkt mit mehreren Versionen sollte ich je Version eine OnlineHelp aufs Web stellen und diese durch die Google-Suche schnell und einfach durchsuchen lassen. So weit, so gut. Das erfolgt ja Grundsätzlich mit dem nachfolgenden Script:

  
<form method="get" action="http://www.google.com/search">  
    <input type="text" name="q" size="30" maxlength="255" value="Ihr Suchwort" style="width: 200px" />  
    <input type="hidden" name="domains" value="http://www.domain.ch" />  
    <input type="hidden" name="sitesearch" value="http://www.domain.ch/onlinehelp" checked="checked" /><br />  
    <input type="submit" name="btnG" value="OnlineHelp durchsuchen" />  
</form>  

Nun aber zu meinem Problem:
Die Google-Suche sollte mit Vorteil nicht die gesamte OnlineHelp durchsuchen, sondern nur die der entsprechenden Version und Sprache.
Die Variable "sitesearch" sollte also nicht wie oben dargestellt sein, sondern sich dynamisch (je nach dem, in welchem Unterverzeichnis die Datei, von der die Suche gestartet wird) anpassen.
Befindet sich die Startseite also z.B. hier: http://www.domain.ch/onlinehelp/v1.0/de/help123.html, soll sie eine Suche nur auf der URL http://www.domain.ch/onlinehelp/v1.0/de auslösen.
Befindet sich der Benutzer auf der Seite http://www.domain.ch/onlinehelp/v1.5/en/help456.html, soll eine Suche nur auf der URL http://www.domain.ch/onlinehelp/v1.5/en suchen.
...

Ich hoffe, ich habe mich einigermassen verständlich ausgedrückt und ihr versteht, was ich brauche.
Kennt jemand eine Möglichkeit, diese zu durchsuchende URL dynamisch zu definieren, so dass immer nur die entsprechende Version und Sprache durchsucht wird?

Vielen Dank für eure Hilfe!
Luc

    1. Vielen Dank für diese ausführliche Antwort. ;)
      Doch leider trifft die nicht, was ich brauche. Ich suche ja nicht nach einem BESTIMMTEN Begriff innerhalb der URL, sondern nach ner Möglichkeit, wie ich das auf der HTML-Seite eingebaute Suchfeld so steuern kann, dass die Suchresultate nur auf der URL gesucht werden, wo die HTML-Seite selber liegt.

      Erschwerend kommt dazu - das habe ich eingangs vergessen zu erwähnen - dass das Grundgerüst jeder einzelnen Seite (egal welcher Version oder Sprache) EIN und DERSELBEN Vorlage (*.dwt) entstammen soll.
      Ich kann also nicht einfach nur das Script entsprechend anpassen, da dieses in der Vorlage und somit versions- und sprachunaghängig sein sollte.

      1. Du hast nicht verstanden, was inurl macht, aber schreibst erstmal eine falsche Antwort. Wieso hast du es nicht erst einmal ausprobiert? Beispiel: https://encrypted.google.com/search?q=site:postgresql.org+inurl:'docs/9/2'

        1. Danke nochmals. Aber ich glaube, wir reden aneinander vorbei.
          Um das ganze zu veranschaulichen habe ich mal was online gestellt und weiter erlärt:
          http://www.codx.ch/pohelp/v8.7/de/test.html

          1. Aber ich glaube, wir reden aneinander vorbei.

            More like: du bemühst dich nicht ums Verständnis von dem, was ich sage.

            Zum dritten und letzten Mal: im Suchbegriff, d.h. der Wert vom Parameter q ("Query"), muss der Filter inurl: vorkommen. Das Beispiel aus meiner vorhergehenden Antwort, übertragen auf dein Webangebot, lautet:

            http://www.google.com/search?sitesearch=http://www.codx.ch&q=inurl:'pohelp/v8/7'

            Ob du den Filter im Markup vom Formularfeld vorbelegst oder mit Javascript beim Abschicken zu den eigentlichen Suchwörtern hinzupfriemelst, bleibt dem Geschmack überlassen. Beides funktioniert.

            1. Zum dritten und letzten Mal: im Suchbegriff, d.h. der Wert vom Parameter q ("Query"), muss der Filter inurl: vorkommen. Das Beispiel aus meiner vorhergehenden Antwort, übertragen auf dein Webangebot, lautet:

              http://www.google.com/search?sitesearch=http://www.codx.ch&q=inurl:'pohelp/v8/7'

              Wie das Query aussehen muss, ist mir klar, ich glaube, das habe ich mehrmals geschrieben. Aber wie kriege ich diese Variabeln "v8.7" und "de" (oder eben anders, abhängig davon, in welchem Pfad die HTML-Datei liegt) in dieses Query?

              Nochmals: es geht NICHT um einen einfachen LInk, den ich einbinden möchte, sondern um ein Suchfeld, mittels Standard-FORM von Google.

              Ich habe folgende Verzeichnisstruktur:

              www.domain.ch/pohelp/v8.7/de/
                 www.domain.ch/pohelp/v8.7/en/
                 www.domain.ch/pohelp/v8.7/fr/

              www.domain.ch/pohelp/v8.8/de/
                 www.domain.ch/pohelp/v8.9/en/
                 www.domain.ch/pohelp/v8.9/fr/

              www.domain.ch/pohelp/v9.0/de/
                 www.domain.ch/pohelp/v9.0/en/
                 www.domain.ch/pohelp/v9.0/fr/

              ...

              JEDES dieser Verzeichnisse beinhaltet hunderte von einzelnen html-Dateien. Das Layout dieser Dateien verwalte ich in EINER Vorlage (*.dwt). In dieser Vorlage - und somit in ALLEN X-100 Dateien befindet sich der Code für die Search-Funktion, die jeweils nur das Verzeichnis durchsuchen soll, in dem die Datei liegt, aus der die Suche aufgerufen wurde.
              Ich kann in dieser EINEN Vorlage nicht die Version und die Sprache vorgeben, sondern suche nach einer Möglichkeit, diese dynamisch abzufüllen.

              Das nachfolgende Java-Script hat - wie ebenfalls bereits beschrieben - zwei Probleme...

              <script type="text/javascript">  
                  alert("<input type=\"hidden\" name=\"sitesearch\" value=\"" + window.location.hostname + window.location.pathname + "\" checked=\"checked\" />");  
              </script>  
              
              

              Problem 1: es gibt die URL INKLUSIVE der HTML-Datei aus - Google würde also nur diese eine Datei durchsuchen --> Ziel verfehlt
              Problem 2: ein Java-Script innerhalb eines Formulares funktioniert nicht --> Ziel verfehlt

              Formular und Script können zur besseren Veranschaulichung unter http://www.codx.ch/pohelp/v8.7/de/test.html eingesehen werden.

              Frage:
              Wie kriege ich es hin, dass im hidden Feld des Formulares immer der entsprechende Pfad, wo die Datei liegt, an Google übergeben wird?
              Evtl. gibt es ein anderes Script, mit dem ich die zu durchsuchende URL ermitteln und dem hidden Feld übergeben kann?

              1. es geht NICHT um einen einfachen LInk, den ich einbinden möchte, sondern um ein [Formular]

                Das kann nicht dein Ernst sein, bist du nicht in der Lage, eines ins andere zu überführen? Das sind grundlegende Dinge, bitte nochmal das SELFHTML-Kapitel "HTML/Formulare" durcharbeiten.

                Das Layout dieser Dateien verwalte ich in EINER Vorlage (*.dwt). In dieser Vorlage - und somit in ALLEN X-100 Dateien befindet sich der Code für die Search-Funktion

                Ich habe vorhin zwei Ansätze genannt.

                Filter im Markup vom Formularfeld vorbelegen
                --------------------------------------------

                Dein Webframework, das du noch gar nicht genannt hast, exponiert die aktuelle URL oder bequemerweise sogar Teile davon in seiner API, bspw. heißt das in Catalyst for_uri. Du brauchst bloß den manipulierten Pfad in der Vorlage an der entsprechende Stelle, die den Wert für das Attribut "value" des Inputelements mit dem Namen "q" erzeugt, einfügen, so dass er im Webbrowser vorbelegt angezeigt wird. Wie gesagt, kenne ich dein (Vorlagen-)System nicht, also kann ich das nur abstrakt beschreiben, nicht konkret.

                mit Javascript beim Abschicken hinzupfriemeln
                ---------------------------------------------

                Der Code ist ungetestet. Er benötigt JQuery.

                <form action="http://www.google.com/search" method="get" id="suche">  
                    <input type="hidden" checked="checked" name="sitesearch" value="www.codx.ch">  
                    <input type="text" style="width: 200px" maxlength="255" size="30" name="q" value="" id="q">  
                    <br>  
                    <input type="submit" value="OnlineHelp durchsuchen" name="btnG">  
                </form>  
                  
                <script type="text/javascript">
                
                var path = window.location.pathname;  
                // this would be much easier with RE, but JS  
                // doesn't have lookbehind, WTF!! let's work around.  
                path = path.split('/', 4);  // e.g. ['', 'pohelp', 'v8.7', 'de']  
                path.shift();               // e.g. ['pohelp', 'v8.7', 'de']  
                path = path.join('/');      // e.g. 'pohelp/v8.7/de'  
                path.replace('\.', '/');    // crappy google is crappy, dots don't work  
                $('#suche').submit(function() { $('#q').val("inurl:'" + path + "' " + $('#q').val()); });
                

                </script>

                Wie kriege ich es hin, dass im hidden Feld des Formulares immer der entsprechende Pfad
                                            im hidden Feld des Formulares
                                               hidden

                Du hörst nicht zu. Der inurl-Filter von gehört in das Suchfeld! Das kannst du schlecht verstecken.

                1. Vielen Dank, jetzt hat's geklappt!
                  Genau dieses Script zum auseinander nehmen des Pfades hat mir gefehlt.
                  Und OK, ja, dass dieses dann ins Suchfeld übernommen werden muss und nicht im hidden Feld "sitesearch" mitgegeben werden kann (um den dortigen Pfad gleich zu komplettieren), hatte ich nicht so verstanden, sorry. Ich ging immer davon aus, dass ich den Pfad dort mitgeben muss.

                  Ich habe nun die Javascript-Variante verwendet, diese funktioniert wunderbar.
                  Falls jemand anderes mit liest und irgendwann vor demselben Problem steht, hier noch eine kleine Beschreibung, was ich nun alles genau gemacht habe:

                  1. von query.com den aktuellen Release runter geladen
                  2. die Datei jquery.js in die Verzeichnisstruktur des Webs abgelegt
                  3. im Header der html-Datei den folgenden Link auf die Datei eingefügt:
                     <script type="text/javascript" src="jquery.js"></script>
                     (Hinweis: der Verweis "src" muss ggf. an die aktuelle Verzeichnisstruktur angepasst werden)

                  4. den bereits von CPAN geposteten Code für das Suchformular verwendet:
                        ~~~html <form action="http://www.google.com/search" method="get" id="suche">
                              <input type="hidden" checked="checked" name="sitesearch" value="www.codx.ch">
                              <input type="text" style="width: 200px" maxlength="255" size="30" name="q" value="" id="q">
                              <br>
                              <input type="submit" value="OnlineHelp durchsuchen" name="btnG">
                        </form>

                  <script type="text/javascript">
                              var path = window.location.pathname;
                              path = path.split('/', 4);  // e.g. ['', 'pohelp', 'v8.7', 'de']
                              path.shift();               // e.g. ['pohelp', 'v8.7', 'de']
                              path = path.join('/');      // e.g. 'pohelp/v8.7/de'
                              path.replace('.', '/');    // crappy google is crappy, dots don't work
                              $('#suche').submit(function() { $('#q').val("inurl:'" + path + "' " + $('#q').val()); });
                        </script>

                    
                    
                  Das Resultat kann noch ein paar Tage unter <http://www.codx.ch/pohelp/v8.7/de/test.html> eingesehen werden. Dann werde ich diese Datei jedoch wieder löschen.  
                  
                  
              2. Hallo,

                Problem 2: ein Java-Script innerhalb eines Formulares funktioniert nicht

                wie kommst du auf die Idee? - Abgesehen davon, dass es ja auch nicht innerhalb des Formulars stehen muss, sondern erst bei dessen Absenden (onsubmit) aufgerufen werden müsste.

                Ciao,
                 Martin

                --
                Rizinus hat sich angeblich als sehr gutes Mittel gegen Husten bewährt.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  1. Weiterführende Erläuterungen direkt am Beispiel: http://www.codx.ch/pohelp/v8.7/de/test.html