anker in php ohne <a>Tag?

loddarmattheus

Erfahrenes Mitglied
Hallihallo Leutz,

ich hab die Frage gestern bereits schon mal im HTML-Forum gestellt, bis ich merkte, dass dies eigentlich ein PHP Problem ist. Hab mir auch diverse Threads zu diesem Thema angeschaut, aber nichts brauchbares für mich gefunden.

Also ich hab ein ziemlich langes Dokument, welches zweigeteilt ist. Beim Laden sollen beide Teile angezeigt werden - Startpunkt oben. Das macht es auch.

Nachdem ich aber nach unten gescrollt habe und im unteren Teil in einem Formular etwas ausgewählt habe, soll die Seite aber nicht wieder ganz von oben angezeigt werden, sondern sollte in der Mitte über dem unteren Teil wieder ansetzen. Der obere Teil soll aber nicht ausgeblendet werden, sondern per Scroll-Balken wieder sichtbar gemacht werden können.

So beginnt der untere Teil mit mehreren SELECT-Abfragen:

Code:
<table>
<tr>
    <td>&nbsp;</td>
    <td colspan="3" class="textschrift">
            <table width="100%" border="0" cellpadding="0" cellspacing="0">
                <tr> 
                  <td width="110" class="textbold" height="40">Tower</td>
                  <td class="textschrift">
      <?php
	$query_twr = 'select * from mein_produkt where (';
	$res_keyword = mysql_query('select * from '.$tables->konfigurator.' where name="auftower"');
	$temp = explode(', ',mysql_result($res_keyword,0,'keyword'));
	for($i=0;$i<count($temp);$i++)
	     {
	      if($i>0) $query_twr .= ' or';
	      $query_twr .= ' nummer like "'.$temp[$i].'%"';
	     }
	$query_twr .= ') order by preissort asc';
	echo '<select size="2" name="kpl" class="suche" onchange="window.location=(this.options[this.selectedIndex].value)">';
	echo '<option value="produkt_detail_kpl.php?twr_id=0">kein&nbsp;&nbsp;&nbsp;&nbsp;</option>';
	$result = mysql_query($query_twr);
	while($row = mysql_fetch_array($result))
	{
	$name = $row['name'];
	$preis = $row['handel'];
	$temp = explode('.',$preis);
	if(strlen($temp[1])==0) $preis .= '.00';
	if(strlen($temp[1])==1) $preis .= '0';
	echo '<option value="produkt_detail_kpl.php?twr_id='.$row['produkt_id'].'"';
	if($kpl['twr_id'] == $row['produkt_id'])
                     {
                     $sum_preis = $preis;
                     $preis_ges += $sum_preis;
                     echo ' SELECTED';
                      }
	echo '>'.$name.' ('.$preis.' €)</option>';
	}
	echo '</select>';
       ?>
          </td>
          <td nowrap width="70" class="preis" align="right">
               <?php if($kpl['twr_id']==0) $sum_preis = 0; $temp = explode '.',$sum_preis); if(strlen($temp[1])==0) $sum_preis .= '.00'; if(strlen($temp[1])==1) $sum_preis .= '0'; echo $sum_preis; $sum_preis=0; ?>
            &euro; </td>
          <td width="30">&nbsp;</td>
       </tr>
     </table>
   </td>
</tr>
</table>

Das mit den Ankern im <a>Tag (z.B. <a name="mitte"></a> und entsprechendem Link <a href="#mitte">) usw. hab ich verstanden, aber wo soll ich in diese SELECT-Abfrage einen <a>Tag einbauen?

Hab das Script auch schon soweit, dass nachdem die Aktion "Select" ausgeführt wurde, er mittels if & else Abfrage in der Mitte der Seite (an der Stelle, wo der Anker sein sollte ;-( etwas schreibt, aber den bei SELFHTML bereitgestellten Befehl <a name="mitte" href="#mitte></a> nicht ausführt. Der sollte eigentlich dafür sorgen, dass die Seite an der Stelle bleibt. Theoretisch jedenfalls.

War jetzt alles ein bissrl kompliziert und man möge mir meine schlechten Code verzeihen. Bin Anfänger.

Greetingz Loddar
 
Du müsstest das so machen das wenn es beim onChange im <select>-Tag noch den entsprechenden Anker übergibt: bla.php#test

dann springt er gleich zum entsprechenden Anker...

Weiss du wie ich das meine
 
Nachdem ich aber nach unten gescrollt habe und im unteren Teil in einem Formular etwas ausgewählt habe, soll die Seite aber nicht wieder ganz von oben angezeigt werden, sondern sollte in der Mitte über dem unteren Teil wieder ansetzen. Der obere Teil soll aber nicht ausgeblendet werden, sondern per Scroll-Balken wieder sichtbar gemacht werden können.

Das ist nicht Aufgabe von PHP. Du solltes dir im klaren sein, dass PHP eine Serverseitge Scriptsprache ist, also alles was auf Clientseite, nach Ausgabe bzw Verarbeitung des Skripts passiert, nicht mehr in den Händen deines Scripts liegt sondern eben beim Client.
Wenn also in dem Dokument etwas ausgewählt wird und irgendwohin gesprungen werden soll, wäre das z.B. ein JavaScript problem,
da die Seite nicht neu geladen wird, durch dieses Event, ist ja kein Submit.
Das du deiner Textbox oder was auch immer sagst, dass er onChange oder bei welchem Event auch immer an die Stelle des Ankers springen soll.

also z.B. so

PHP:
<select onChange="jumpAnchor()">
 <option>...
</select>

in der Funktion jumpAnchor würde dann sowas stehen:
PHP:
<script language="JavaScript">
 <!--
  function jumpAnchor()
  {
    document.location.href="#ANkername"; 
  }
 //-->
</script>
.

Kann aber auch sein, dass du es gleich so verkprzt schreiben kannst:
PHP:
<select onChange="document.location.href='#ANkername';">
 
Zuletzt bearbeitet:
Du musst einfach an die URLs die du aufrufst ein #anchorname hängen. Das ganze müsste dann soweit ich mich erinnere vor den per GET übergebenen Variablen geschehen. Konkret müsstest du folgende Zeile in deinem Code
PHP:
echo '<option value="produkt_detail_kpl.php?twr_id='.$row['produkt_id'].'"';
So aussehen lassen
PHP:
echo '<option value="produkt_detail_kpl.php#anchorname?twr_id='.$row['produkt_id'].'"';

Habe jetzt nicht deinen ganzen Code durchgucken können, deshalb kann es sein, dass du das an anderen Stellen auch noch einfügen musst, aber prinzipiell sollte es das Problem lösen.
 
Am Besten fragst du im Java-Script Forum nach wie du bei deinem onChange-Event noch einen zusätzlichen Wert übergeben kannst (der Anker)...
 
Hab jetzt die ganzen Vorschläge durchgearbeitet (besten Dank nochmal @all)

Das mit dem Ankernamen im Sinne von

PHP:
echo '<option value="produkt_detail_kpl.php#anchorname?twr_id='.$row['produkt_id'].'"';

leider nicht.

Dagegen funktioniert das mit der Javascript-Abfrage in onChange Bereich vom Grundsatz her schon, aber nur wenn ausschließlich das drin steht:

PHP:
<select onChange="jumpAnchor()"> 
<option>... 
</select>

Das Problem ist bei mir allerdings, im onChange-Bereich steht bereits was drin:

PHP:
				echo '<select size="2" name="kpl" class="suche" onchange="window.location=(this.options[this.selectedIndex].value)">';

Das darf man auch nicht wegnehmen, da er mir die jeweilige Auswahl sonst nicht speichert.

Hat jemand eine Idee, wie ich das mit der Javascript-Abfrage "jumpAnchor()" verbinden kann?

Loddar
 
Original geschrieben von loddarmattheus
Hat jemand eine Idee, wie ich das mit der Javascript-Abfrage "jumpAnchor()" verbinden kann?
Beides zusammen in einer zuvor definierten JS Funktion bündeln und dann die JS Funktion aufrufen. Alternativ könnte evtl. auch Trennen durch ; funktionieren, aber da würde ich mich jetzt nicht drauf festnageln lassen.
 
Ich weiss nicht obs dir weiterhilft... aber warum sendest du das Formular nicht einfach... dazu sind sie doch da :)
gib als Formularziel #anchorname an.... dann wird das Formular dorthin gesendet, und wenn sich dort ein Anker namens
anchorname befindet, wird auch dorthingesprungen.
PHP:
Nen Haufen Text
......
<a name="anchorname"><u>Ich bin der Anker</u></a><br>
<form action="#anchorname">
<select name="twr_id"onchange="this.form.submit()">
	<option>Kein
	<option>blablubb
	<option>bla
	<option>blubb
</select>
<input type="submit">
</form>
.......Noch mehr Text
ich bin mir allerdings auch nicht so sicher, ob ich dich jetzt überhaupt richtig verstanden habe.
Ich bin dabei davon ausgegangen, dass die Seite, in der das ganze steht, die produkt_detail_kpl.php ist--->
andernfalls geht das natürlich nicht... du kannst nicht gleichzeitig zu einem Anker innerhalb der aktuellen Seite springen, und diese Seite durch eine
andere austauschen.

Da müsstest du, wenn dies der Fall sein sollte, entweder ein neues Fenster öffnen, wohin du die Formulardaten sendest(oder von mir aus auch ein verstecktes Frame oder so)....
und danach in dem ursprünglichen Fenster zu dem Anker springen.....
oder du sendest das Formular an die produkt_detail_kpl.php, und nachdem dort die Variable verarbeitet wurde, sendest du einen Location-header:

PHP:
header("Location:ursprungsseite.php#anchorname");exit();
 
Zurück