Avatar billede pissed_squirrel Nybegynder
18. december 2003 - 11:35 Der er 24 kommentarer og
1 løsning

Hjælp til fletning af PHP og Javascript Menu

Jeg har denne her menu

<!-- Menu Head Start -->

<style type="text/css">
.clTopMenu      {position:absolute; width:100px; height:150px; clip:rect(0px 101px 14px 0px); layer-background-color:#eeeeee; background-color:#eeeeee; z-index:31; visibility:hidden;}
.clTopMenuBottom {position:absolute; width:100px; height:3px; clip:rect(0px 101px 3px 0px); top:11; layer-background-color:#eeeeee; background-color:#eeeeee; z-index:2;}
.clTopMenuText  {position:absolute; width:91px; left:5px; top:15px; font-family:arial,helvetica,sans-serif; font-size:11px; background-color:#eeeeee; z-index:1;}
</style>


<script language="JavaScript" type="text/javascript">
/********************************************************************************** 
NewsMenu
*  Copyright (C) 2001 Thomas Brattli
*  This script was released at DHTMLCentral.com
*  Visit for more great scripts!
*  This may be used and changed freely as long as this msg is intact!
*  We will also appreciate any links you could give us.
*
*  Made by Thomas Brattli
*
*  Script date: 09/23/2001 (keep this date to check versions)
*********************************************************************************/
function lib_bwcheck(){ //Browsercheck (needed)
    this.ver=navigator.appVersion
    this.agent=navigator.userAgent
    this.dom=document.getElementById?1:0
    this.opera5=(navigator.userAgent.indexOf("Opera")>-1 && document.getElementById)?1:0
    this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
    this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
    this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
    this.ie=this.ie4||this.ie5||this.ie6
    this.mac=this.agent.indexOf("Mac")>-1
    this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
    this.ns4=(document.layers && !this.dom)?1:0;
    this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
    return this
}
var bw=lib_bwcheck()
/********************************************************************************
If you want to change the appearance of the text, background-colors, size or
anything do that in the style tag above.

This menu might not be as easy to adapt to your own site, but please
play around with it before you mail me for help...
****************************************************************************/

/***************************************************************************
Variables to set.
****************************************************************************/

//There are 2 ways these menus can be placed
// 0 = column
// 1 = row
nPlace=0


//How many menus do you have? (remember to copy and add divs in the body if you add menus)
var nNumberOfMenus=2

var nMwidth=100 //The width on the menus (set the width in the stylesheet as well)
var nPxbetween=100 //Pixels between the menus
var nFromleft=275 //The first menus left position
var nFromtop=197 //The top position of the menus
var nBgcolor='#eeeeee' //The bgColor of the bottom mouseover div
var nBgcolorchangeto='#6380BC' //The bgColor to change to
var nImageheight=11 //The position the mouseover line div will stop at when going up!

/***************************************************************************
You shouldn't have to change anything below this
****************************************************************************/
//Object constructor
function makeNewsMenu(obj,nest){
    nest=(!nest) ? "":'document.'+nest+'.'                   
      this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+"document.layers." +obj):0;       
    this.evnt=bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;           
    this.scrollHeight=bw.ns4?this.css.document.height:this.evnt.offsetHeight
    this.moveIt=b_moveIt;this.bgChange=b_bgChange;
    this.slideUp=b_slideUp; this.slideDown=b_slideDown;
    this.clipTo=b_clipTo;
    this.obj = obj + "Object";     eval(this.obj + "=this")       
}
//Objects methods

// A unit of measure that will be added when setting the position of a layer.
var px = bw.ns4||window.opera?"":"px";

function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x+px; this.css.top=this.y+px;}
function b_bgChange(color){this.css.backgroundColor=color; this.css.bgColor=color; this.css.background=color;}
function b_clipTo(t,r,b,l){
    if(bw.ns4){this.css.clip.top=t; this.css.clip.right=r; this.css.clip.bottom=b; this.css.clip.left=l
    }else this.css.clip="rect("+t+"px "+r+"px "+b+"px "+l+"px)";
}
function b_slideUp(ystop,moveby,speed,fn,wh){
    if(!this.slideactive){
        if(this.y>ystop){
            this.moveIt(this.x,this.y-5); eval(wh)
            setTimeout(this.obj+".slideUp("+ystop+","+moveby+","+speed+",'"+fn+"','"+wh+"')",speed)
        }else{
            this.slideactive=false; this.moveIt(0,ystop); eval(fn)
        }
    }
}
function b_slideDown(ystop,moveby,speed,fn,wh){
    if(!this.slideactive){
        if(this.y<ystop){
            this.moveIt(this.x,this.y+5); eval(wh)
            setTimeout(this.obj+".slideDown("+ystop+","+moveby+","+speed+",'"+fn+"','"+wh+"')",speed)
        }else{
            this.slideactive=false; this.moveIt(0,ystop); eval(fn)
        }
    }
}
//Initiating the page, making cross-browser objects
function newsMenuInit(){
    oTopMenu=new Array()
    zindex=10
    for(i=0;i<=nNumberOfMenus;i++){
        oTopMenu[i]=new Array()
        oTopMenu[i][0]=new makeNewsMenu('divTopMenu'+i)
        oTopMenu[i][1]=new makeNewsMenu('divTopMenuBottom'+i,'divTopMenu'+i)
        oTopMenu[i][2]=new makeNewsMenu('divTopMenuText'+i,'divTopMenu'+i)
        oTopMenu[i][1].moveIt(0,nImageheight)
        oTopMenu[i][0].clipTo(0,nMwidth,nImageheight+3,0)
        if(!nPlace) oTopMenu[i][0].moveIt(i*nMwidth+nFromleft+(i*nPxbetween),nFromtop)
        else{
            oTopMenu[i][0].moveIt(nFromleft,i*nImageheight+nFromtop+(i*nPxbetween))
            oTopMenu[i][0].css.zIndex=zindex--
        }
        oTopMenu[i][0].css.visibility="visible"
    }
}
//Moves the menu
function topMenu(num){
    if(oTopMenu[num][1].y==nImageheight) oTopMenu[num][1].slideDown(oTopMenu[num][2].scrollHeight+20,10,40,'oTopMenu['+num+'][0].clipTo(0,nMwidth,oTopMenu['+num+'][1].y+3,0)','oTopMenu['+num+'][0].clipTo(0,nMwidth,oTopMenu['+num+'][1].y+3,0)')
    else if(oTopMenu[num][1].y==oTopMenu[num][2].scrollHeight+20) oTopMenu[num][1].slideUp(nImageheight,10,40,'oTopMenu['+num+'][0].clipTo(0,nMwidth,oTopMenu['+num+'][1].y+3,0)','oTopMenu['+num+'][0].clipTo(0,nMwidth,oTopMenu['+num+'][1].y+3,0)')
}
//Changes background onmouseover
function menuOver(num){oTopMenu[num][1].bgChange(nBgcolorchangeto)}
function menuOut(num){oTopMenu[num][1].bgChange(nBgcolor)}

//Calls the init function onload if the browser is ok...
if (bw.bw) onload = newsMenuInit;

/***************
Multiple Scripts
If you have two or more scripts that use the onload event, probably only one will run (the last one).
Here is a solution for starting multiple scripts onload:
  1. Delete or comment out all the onload assignments, onload=initScroll and things like that.
  2. Put the onload assignments in the body tag like in this example, note that they must have braces ().
  Example: <body onload="initScroll(); initTooltips(); initMenu();">
**************/
</script>

<!-- Menu Head End -->

<!-- Menu START -->

<a href="#" onmouseover="menuOver(0)" onmouseout="menuOut(0)" onclick="topMenu(0); return false;" onfocus="if(this.blur)this.blur();"><div id="divTopMenu0" class="clTopMenu">Hjem</a>
    <div id="divTopMenuText0" class="clTopMenuText">
        <a href='' title='Hovedsiden' alt='Hovedsiden'>Hovedsiden</a><BR>
        <a href='?page=Nyheder' title='Nyheder' alt='Nyheder'>Nyheder</a>
    </div>
    <div id="divTopMenuBottom0" class="clTopMenuBottom"></div>
</div>

<!-- Menu END -->

Nu er det sådan at dette script skal udbygges så det kan bruges sammen med en MySQL database så man hurtigt og nemt kan putte flere menupunkter på og fjerne den igen på samme måde

Problemet ligger i jeg ikke lige kan finde ud af at få lave den løkke som skal producere menupunkterne

Jeg prøvede med nogle for-løkker og det virkede også til dels, men alle punkter kom på under menuer og det var jo ikke lige meningen

MySQL'en ser således ud:

CREATE TABLE `menu` (
  `navn` varchar(255) default NULL,
  `top_id` varchar(10) default NULL,
  `rang` varchar(10) default NULL,
  `side` varchar(255) default NULL
) TYPE=MyISAM;

#
# Data dump for tabellen `menu`
#

INSERT INTO `menu` (`navn`, `top_id`, `rang`, `side`) VALUES ('Hjem', '1', '1', NULL),
('Hovedsiden', '1', '2', NULL),
('Nyheder', '1', '3', '?page=Nyheder'),
('Profil', '2', '1', NULL),
('Profil', '2', '2', '?page=Profil'),
('Kontakt', '2', '3', '?page=Kontakt');


Nogle der vil hjælpe mig med dette??

Tak :D
Avatar billede pissed_squirrel Nybegynder
18. december 2003 - 11:37 #1
Jeg prøvede sådan her med nogle løkker:

$result = mysql_query("SELECT * FROM menu")or die(mysql_error());
while ($row = mysql_fetch_array($result))
{
    $menunavn[] = $row[navn];
    $top_id[] = $row[top_id];
    $rang[] = $row[rang];
}

--Længere nede

for($i=0;$i<count($menunavn);$i++){

echo "<a href='#' onmouseover='menuOver(".$i.")' onmouseout='menuOut(".$i.")' onclick='topMenu(".$i."); return false;' onfocus='if(this.blur)this.blur();'><div id='divTopMenu".$i."' class='clTopMenu'>".$menunavn[$i]."</a>\n";
echo "<div id='divTopMenuText".$i."' class='clTopMenuText'>\n";

for($a=0;$a<count($menunavn);$a++){
    if($top_id > 1){
        echo "<a href='' title='".$menunavn[$a]."' alt='".$menunavn[$a]."'>".$menunavn[$a]."</a><BR>\n";
    $i+1;
    }
}

echo "</div>\n";
echo "<div id='divTopMenuBottom".$i."' class='clTopMenuBottom'></div>\n";
echo "</div>\n";

}
Avatar billede pissed_squirrel Nybegynder
18. december 2003 - 22:42 #2
I tilfælde af at nogle ikke skulle forstå hvordan menuen skal se ud når den er på siden så er det sådan her:

          Hjem-------Profil------Kraner
            |          |          |
      Hovedsiden    Profil    Alle Kraner
            |          |
        Nyheder    Kontakt
Avatar billede pissed_squirrel Nybegynder
27. januar 2004 - 12:25 #3
Slet ikke nogle der kan/vil hjælpe ??
Avatar billede pissed_squirrel Nybegynder
02. februar 2004 - 22:11 #4
Så lukkes der!
Avatar billede espersen Novice
27. februar 2004 - 09:57 #5
fik du det til at virke (fletningen af PHP og JavaScript) ?
Avatar billede pissed_squirrel Nybegynder
27. februar 2004 - 11:12 #6
Jeg fandt et anden script som var lettere at flette sammen med PHP
Avatar billede espersen Novice
27. februar 2004 - 11:17 #7
hhmm... jeg får denne fejl
Parse error: parse error, expecting `','' or `';'' in /usr/www/x-site/links_.php on line 26

når der bruges "" omkring

koden ser således ud :

<a href="kontakt.htm" title="Send mig en e-mail"
    onmouseover="this.href='mai' + 'lto:' + '<?php echo $email[0];?>' + '&#64;' + '<?php echo $email[1];?>'"
    onfocus="this.href='mai' + 'lto:' + '<?php echo $email[0];?>' + '&#64;' + '<?php echo $email[1];?>'">
    Send mig en e-mail

Det er en blanding af PHP og JavaScript - har et spm her : http://www.eksperten.dk/spm/462218
Avatar billede pissed_squirrel Nybegynder
27. februar 2004 - 12:04 #8
Hvis du vil bruge flere " (dobbelt) inden for echo "altmuligtekst", så skal du bruge . for at samle dem igen, ellers får du fejl

<?php

echo "Sådan her kan det gøres"." er det det du mener??<BR>";
echo "Hvis du vil bruge dobbelt indenfor så skal du bruge \ før: sådan her \", så det bliver escapet<BR>";
echo "Ellers kan du også bruge ' i stedet for \" i HTML'en således <font face='Verdana'>Nemlig</font>";

?>
Avatar billede espersen Novice
27. februar 2004 - 21:08 #9
hhmm... har ikke helt fattet det.. (er også ret ny i denne kategori..

Hvad skal det ændres til i denne del af koden ?

onmouseover="this.href='mai' + 'lto:' + '<?php echo $email[0];?>' + '&#64;' + '<?php echo $email[1];?>'"
    onfocus="this.href='mai' + 'lto:' + '<?php echo $email[0];?>' + '&#64;' + '<?php echo $email[1];?>'">
    Send mig en e-mail
Avatar billede pissed_squirrel Nybegynder
28. februar 2004 - 03:40 #10
kan jeg få resten af <a href=""></a> koden ??
Avatar billede espersen Novice
28. februar 2004 - 08:40 #11
ååhh ja  ;o)

<a href="kontakt.htm" title="Send mig en e-mail"
    onmouseover="this.href='mai' + 'lto:' + '<?php echo $email[0];?>' + '&#64;' + '<?php echo $email[1];?>'"
    onfocus="this.href='mai' + 'lto:' + '<?php echo $email[0];?>' + '&#64;' + '<?php echo $email[1];?>'">
    Send mig en e-mail
</a>
Avatar billede pissed_squirrel Nybegynder
28. februar 2004 - 18:44 #12
<?php

$email = array("nemlig", "eksperten.dk");

?>

<a href="kontakt.htm" title="Send mig en e-mail"
    onmouseover="this.href='mailto:<?php echo $email[0];?>&#64;<?php echo $email[1];?>'"
    onfocus="this.href='mailto:<?php echo $email[0];?>&#64;<?php echo $email[1];?>'">
    Send mig en e-mail
</a>

Jeg har fjernet en del overflødig kode, og det har virket for mig hele tiden

Hvis du putter alt det jeg har skrevet ind i et .php dokument og så prøver det
Avatar billede espersen Novice
28. februar 2004 - 20:32 #13
kanon !  Det virker !

jeg tester lige videre med at kunne hente fra databasen  ;0)
Avatar billede pissed_squirrel Nybegynder
28. februar 2004 - 23:35 #14
Det kan du gøre med en while løkke og så $row[tabel_i_database]

Jeg kan godt komme med et eksempel hvis du vil have det
Avatar billede espersen Novice
28. februar 2004 - 23:49 #15
tror jeg er ved at være der - det er noget med :

$query = mysql_query("SELECT * FROM d_mof1 ORDER BY id DESC");
while($row = mysql_fetch_array($query)) {
Avatar billede pissed_squirrel Nybegynder
29. februar 2004 - 10:08 #16
Det er nemlig rigtigt

og inde i den while løkke kan du så bruge $row[tabel_i_database]
Avatar billede espersen Novice
02. marts 2004 - 12:20 #17
Jeg er ved at fare vild i koden ; Nedenstående virker men er alt for venlig mod spam-robotter, der leder efter email-adresser (derfor kombinere med javascript, da det giver lidt beskyttelse).

Jeg har pastet koden, hvor du kan se at udover email så henter den også navn og adresse i databasen.


<?
$connection = mysql_connect("******","******","******");
mysql_select_db("******", $connection);


$query = mysql_query("SELECT * FROM forening ORDER BY id DESC");
while($row = mysql_fetch_array($query)) {

echo"
<table width=756 border=0 cellspacing=0 cellpadding=0>
        <tr>
          <td width=169 valign='top'><font face='verdana' size='1' color='#000000'><b>$row[kreds]</b></font></td>
          <td width=402 valign='top'><table width=405 border=0 cellspacing=0 cellpadding=0>
        <tr>
          <td width=193><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif><b>$row[kontakt1_top]:</b></font></td>
          <td width=212><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif><b>$row[kontakt2_top]:</b></font></td>
        </tr>
        <tr>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>$row[kontakt1]</font></td>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>$row[kontakt2]</font></td>
        </tr>
        <tr>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>$row[adresse1]</font></td>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>$row[adresse2]</font></td>
        </tr>
        <tr>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>$row[pn1]</font></td>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>$row[pn2]</font></td>
        </tr>
        <tr>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>Tlf:
            $row[telefon1]</font></td>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>Tlf:
            $row[telefon2]</font></td>
        </tr>
        <tr>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif><a href='mailto:$row[mail1_1]@$row[mail1_2]'>$row[mail1_1]<img src='punkt.gif' border='0'>$row[mail1_2]</a></font></td>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif><a href='mailto:$row[mail2_1]@$row[mail2_2]'>$row[mail2_1]<img src='punkt.gif' border='0'>$row[mail2_2]</a></font></td>
        </tr>
        <tr>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>$row[andet1]</font></td>
          <td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>$row[andet2]</font></td>
        </tr>
      </table>


</td>
          <td width=185 valign='top'><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif><a href='http://$row[link]' target='_blank'>$row[link]</a></font></td>
        </tr>
      </table><br><hr width='750' noshade shade><br>

";
}
?>
    </td>
  </tr>
</table>
Avatar billede espersen Novice
02. marts 2004 - 17:29 #18
nu virker det : ";
?>
    <a href="kontakt.php" title="Send e-mail"
    onmouseover="this.href='mai' + 'lto:' + '<?php echo $row[mail1_1] ?>' + '&#64;' + '<?php echo $row[mail1_2] ?>'"
    onfocus="this.href='mai' + 'lto:' + '<?php echo $row[mail1_1] ?>' + '&#64;' + '<?php echo $row[mail1_2] ?>'">
    <img src="/images/email_icon.gif" alt="Send email"border="0"></a></font>

<? echo"     
    </td><td><font color=#000000 size=1 face=Verdana, Arial, Helvetica, sans-serif>
";
?>
    <a href="kontakt.php" title="Send e-mail"
    onmouseover="this.href='mai' + 'lto:' + '<?php echo $row[mail2_1] ?>' + '&#64;' + '<?php echo $row[mail2_2] ?>'"
    onfocus="this.href='mai' + 'lto:' + '<?php echo $row[mail2_1] ?>' + '&#64;' + '<?php echo $row[mail2_2] ?>'">
    <img src="/images/email_icon.gif" alt="Send email"border="0"></a>
    </font>

<? echo"

eneste ulempe er at den viser "email_icon.gif" uanset om der er anført en emailadresse eller ej... - kan nok ikke undgåes.
Avatar billede pissed_squirrel Nybegynder
02. marts 2004 - 21:46 #19
du kan da bare lave en if-sætning, så du kan checke om etellerandet er sandt/falsk og så få den til at smide billedet på hvis det er

if($row[emailadresse] == "etellerandet")
{

}else{

}

Det er jo godt det virker :D

Lidt hjælp har jeg dog kommet med !? ;)
Avatar billede espersen Novice
02. marts 2004 - 21:48 #20
tro mig !! Du har hjulpet stort ! - du burde få point for det her !
Avatar billede espersen Novice
02. marts 2004 - 21:53 #21
indtil videre har jeg kastet lidt karma efter dig  ;o) 

hhmmm... jeg er ret ny med det kære PHP/MySQL - har mest rodet med Include, hvilket jo ikke ligefrem er den største udfordring...

Den skal bare checke om der er noget indhold, hvis ja ; så vise billedet; hvis nej skal den ikke vise noget.
Avatar billede espersen Novice
02. marts 2004 - 22:41 #22
dvs noget i stil med dette ? (taget fra koden herover):

......
?>'">
<? echo"
if($row[emailadresse] == "<img src="/images/email_icon.gif" alt="Send email"border="0">")
{
}else{
}
</a>
    </font>
Avatar billede pissed_squirrel Nybegynder
03. marts 2004 - 11:55 #23
Hvis du vil tjekke om der er noget i $row[emailadresse], så kan det gøres med sådan her

if($row[emailadresse] == "")

eller hvis den kan være NULL, så kan du bruge det i stedet for ""

if($row[emailadresse] == NULL)

----

if($row[emailadresse != "")
{
echo "<img src='images/email_icon.gif' alt='Send Email' Border='0'>";
}

---

Læg mærke til at jeg har udskiftet det ene = tegn med et ! da den så tjekker om det ikke er sandt (! = NOT, dvs. != er det samme som IKKE LIGMED)
Avatar billede espersen Novice
03. marts 2004 - 14:39 #24
jamen !  det er jo kanon ! - der virker helt efter hensigten !
Avatar billede pissed_squirrel Nybegynder
03. marts 2004 - 15:31 #25
Det var da godt ;D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester