1 (edited by liquidat0r 2007-02-25 13:05)

Topic: Including PHP in JS

Is this possible? Because I cant get it to work.

http://www.kntl.co.uk/include/user/navigation_js.phps

Lines 63 & 77.

---

This file is included in my tpl files: <pun_include "navigation_js.php">. It generates a DHTML drop down menu, which you can see on the homepage.

Re: Including PHP in JS

I'd do it somewhat different tbh.

<?php header('Content-type: text/javascript'); ?>
/***********************************************

* AnyLink Drop Down Menu- © Dynamic Drive (www.dynamicdrive.com)

* This notice MUST stay intact for legal use

* Visit http://www.dynamicdrive.com/ for full source code

***********************************************/

//Contents for menu 1

var menu1=new Array()

menu1[0]='<a href="http://www.kntl.co.uk/forums.php">Forums</a>'

menu1[1]='<a href="http://www.kntl.co.uk/userlist.php">Userlist</a>'

menu1[2]='<a href="http://www.kntl.co.uk/search.php">Search</a>'



//Contents for menu 2, and so on

var menu2=new Array()

menu2[0]='<a href="http://www.kntl.co.uk/members.php">Clan Members</a>'

menu2[1]='<a href="http://www.kntl.co.uk/about.php">About Us</a>'

menu2[2]='<a href="http://www.kntl.co.uk/servers.php">Our Servers</a>'

menu2[3]='<a href="http://www.kntl.co.uk/leaderboard.php">LeaderBoard</a>'

menu2[4]='<a href="http://www.kntl.co.uk/map.php">Member Map</a>'

menu2[5]='<a href="#">Join Us!</a>'



var menu3=new Array()

menu3[0]='<a href="http://www.kntl.co.uk/bf2stats/index.php">BF2 Stats</a>'

menu3[1]='<a href="http://www.kntl.co.uk/arcade.php">Arcade</a>'

menu3[2]='<a href="http://www.kntl.co.uk/online.php">Who is online?</a>'

menu3[3]='<a href="http://www.kntl.co.uk/gallery.php">Image Gallery</a>'



var menu4=new Array()

menu4[0]='<a href="http://www.kntl.co.uk/bf2stats/profile.php">Profile</a>'

menu4[1]='<a href="http://www.kntl.co.uk/message_list.php">Messages</a>'

menu4[2]='<a href="http://www.kntl.co.uk/search.php?action=show_new">New Posts</a>'

menu4[3]='<?php echo '<a href="login.php?action=out&id='.$pun_user['id'].'">'.$lang_common['Logout'].'</a>' ?>'



var menu5=new Array()

menu5[0]='<a href="http://www.kntl.co.uk/bf2stats/profile.php">Profile</a>'

menu5[1]='<a href="http://www.kntl.co.uk/message_list.php">Messages</a>'

menu5[2]='<a href="http://www.kntl.co.uk/search.php?action=show_new">New Posts</a>'

menu5[3]='<a href="http://www.kntl.co.uk/admin_index.php">Administration</a>'

menu4[4]='"<?php echo '<a href="login.php?action=out&id='.$pun_user['id'].'">'.$lang_common['Logout'].'</a>' ?>"'


var menuwidth='150px' //default menu width

var menubgcolor='#3E3D3D'  //menu bgcolor

var disappeardelay=250  //menu disappear speed onMouseout (in miliseconds)

var hidemenu_onclick="yes" //hide menu when user clicks within menu?



/////No further editting needed

var ie4=document.all

var ns6=document.getElementById&&!document.all

if (ie4||ns6)

document.write('<div id="dropmenudiv" style="visibility:hidden;width:'+menuwidth+';background-color:'+menubgcolor+'" onMouseover="clearhidemenu()" onMouseout="dynamichide(event)"></div>')

function getposOffset(what, offsettype){

var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;

var parentEl=what.offsetParent;

while (parentEl!=null){

totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;

parentEl=parentEl.offsetParent;

}

return totaloffset;

}

function showhide(obj, e, visible, hidden, menuwidth){

if (ie4||ns6)

dropmenuobj.style.left=dropmenuobj.style.top="-500px"

if (menuwidth!=""){

dropmenuobj.widthobj=dropmenuobj.style

dropmenuobj.widthobj.width=menuwidth

}

if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")

obj.visibility=visible

else if (e.type=="click")

obj.visibility=hidden

}

function iecompattest(){

return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body

}

function clearbrowseredge(obj, whichedge){

var edgeoffset=0

if (whichedge=="rightedge"){

var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15

dropmenuobj.contentmeasure=dropmenuobj.offsetWidth

if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)

edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth

}

else{

var topedge=ie4 && !window.opera? iecompattest().scrollTop : window.pageYOffset

var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18

dropmenuobj.contentmeasure=dropmenuobj.offsetHeight

if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move up?

edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight

if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either?

edgeoffset=dropmenuobj.y+obj.offsetHeight-topedge

}

}

return edgeoffset

}

function populatemenu(what){

if (ie4||ns6)

dropmenuobj.innerHTML=what.join("")

}

function dropdownmenu(obj, e, menucontents, menuwidth){

if (window.event) event.cancelBubble=true

else if (e.stopPropagation) e.stopPropagation()

clearhidemenu()

dropmenuobj=document.getElementById? document.getElementById("dropmenudiv") : dropmenudiv

populatemenu(menucontents)

if (ie4||ns6){

showhide(dropmenuobj.style, e, "visible", "hidden", menuwidth)

dropmenuobj.x=getposOffset(obj, "left")

dropmenuobj.y=getposOffset(obj, "top")

dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px"

dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"

}

return clickreturnvalue()

}

function clickreturnvalue(){

if (ie4||ns6) return false

else return true

}

function contains_ns6(a, b) {

while (b.parentNode)

if ((b = b.parentNode) == a)

return true;

return false;

}

function dynamichide(e){

if (ie4&&!dropmenuobj.contains(e.toElement))

delayhidemenu()

else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))

delayhidemenu()

}

function hidemenu(e){

if (typeof dropmenuobj!="undefined"){

if (ie4||ns6)

dropmenuobj.style.visibility="hidden"

}

}

function delayhidemenu(){

if (ie4||ns6)

delayhide=setTimeout("hidemenu()",disappeardelay)

}

function clearhidemenu(){

if (typeof delayhide!="undefined")

clearTimeout(delayhide)

}

if (hidemenu_onclick=="yes")

document.onclick=hidemenu

Save that as js.php in your forum root or so. Then in your tpl files, put this in the <head> section:

<script type="text/javascript" src="js.php"></script>

Re: Including PHP in JS

Well whatever, but that doesn't solve the problem. Everything works apart from the php inside the js code.

Re: Including PHP in JS

Include common.php

Re: Including PHP in JS

php is server side, javascript is client side.  unless your client has a php hypertext preprocessor built into their browser, and has access to server side punbb variables, then no, its not going to work.

the only way its going to work (from a php perspective) is to let php preprocess the php then send the processed javascript to the client.  as EB said, include the needed php dependencies in your java script file and reference it the way he showed you in post #2.

6 (edited by liquidat0r 2007-02-25 18:49)

Re: Including PHP in JS

OK, I've done exactly what EB suggested and it still doesn't work. Any other ideas? If not, I think I'll just not bother. Thanks to those who have helped so far.

Re: Including PHP in JS

Can I see the code again?
And does it give any errors?

Re: Including PHP in JS

I have updated the phps file.

It does not give any errors, however it does not work in IE and Opera, only FF.

Re: Including PHP in JS

<?php
if(!defined('PUN_ROOT'))
    define('PUN_ROOT', './');

header('Content-type: text/javascript');

include PUN_ROOT."include/common.php";
?>


/***********************************************

* AnyLink Drop Down Menu- © Dynamic Drive (www.dynamicdrive.com)

* This notice MUST stay intact for legal use

* Visit http://www.dynamicdrive.com/ for full source code

***********************************************/

//Contents for menu 1

var menu1=new Array()

menu1[0]='<a href="http://www.kntl.co.uk/forums.php">Forums</a>'

menu1[1]='<a href="http://www.kntl.co.uk/userlist.php">Userlist</a>'

menu1[2]='<a href="http://www.kntl.co.uk/search.php">Search</a>'



//Contents for menu 2, and so on

var menu2=new Array()

menu2[0]='<a href="http://www.kntl.co.uk/members.php">Clan Members</a>'

menu2[1]='<a href="http://www.kntl.co.uk/about.php">About Us</a>'

menu2[2]='<a href="http://www.kntl.co.uk/servers.php">Our Servers</a>'

menu2[3]='<a href="http://www.kntl.co.uk/leaderboard.php">LeaderBoard</a>'

menu2[4]='<a href="http://www.kntl.co.uk/map.php">Member Map</a>'

menu2[5]='<a href="#">Join Us!</a>'



var menu3=new Array()

menu3[0]='<a href="http://www.kntl.co.uk/bf2stats/index.php">BF2 Stats</a>'

menu3[1]='<a href="http://www.kntl.co.uk/arcade.php">Arcade</a>'

menu3[3]='<a href="http://www.kntl.co.uk/chatbox.php">ChatBox</a>'

menu3[4]='<a href="http://www.kntl.co.uk/online.php">Who\'s online?</a>'

menu3[5]='<a href="http://www.kntl.co.uk/gallery.php">Image Gallery</a>'



var menu4=new Array()

menu4[0]='<a href="http://www.kntl.co.uk/bf2stats/profile.php">Profile</a>'

menu4[1]='<a href="http://www.kntl.co.uk/message_list.php">Messages</a>'

menu4[2]='<a href="http://www.kntl.co.uk/search.php?action=show_new">New Posts</a>'

menu4[3]='<?php echo '<a href="login.php?action=out&id='.$pun_user['id'].'">'.$lang_common['Logout'].'</a>' ?>'



var menu5=new Array()

menu5[0]='<a href="http://www.kntl.co.uk/bf2stats/profile.php">Profile</a>'

menu5[1]='<a href="http://www.kntl.co.uk/message_list.php">Messages</a>'

menu5[2]='<a href="http://www.kntl.co.uk/search.php?action=show_new">New Posts</a>'

menu5[3]='<a href="http://www.kntl.co.uk/admin_index.php">Administration</a>'

menu4[4]=<?php echo '<a href="login.php?action=out&id='.$pun_user['id'].'">'.$lang_common['Logout'].'</a>' ?>


var menuwidth='150px' //default menu width

var menubgcolor='#3E3D3D'  //menu bgcolor

var disappeardelay=250  //menu disappear speed onMouseout (in miliseconds)

var hidemenu_onclick="yes" //hide menu when user clicks within menu?



/////No further editting needed

var ie4=document.all

var ns6=document.getElementById&&!document.all

if (ie4||ns6)

document.write('<div id="dropmenudiv" style="visibility:hidden;width:'+menuwidth+';background-color:'+menubgcolor+'" onMouseover="clearhidemenu()" onMouseout="dynamichide(event)"></div>')

function getposOffset(what, offsettype){

var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;

var parentEl=what.offsetParent;

while (parentEl!=null){

totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;

parentEl=parentEl.offsetParent;

}

return totaloffset;

}

function showhide(obj, e, visible, hidden, menuwidth){

if (ie4||ns6)

dropmenuobj.style.left=dropmenuobj.style.top="-500px"

if (menuwidth!=""){

dropmenuobj.widthobj=dropmenuobj.style

dropmenuobj.widthobj.width=menuwidth

}

if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")

obj.visibility=visible

else if (e.type=="click")

obj.visibility=hidden

}

function iecompattest(){

return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body

}

function clearbrowseredge(obj, whichedge){

var edgeoffset=0

if (whichedge=="rightedge"){

var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15

dropmenuobj.contentmeasure=dropmenuobj.offsetWidth

if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)

edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth

}

else{

var topedge=ie4 && !window.opera? iecompattest().scrollTop : window.pageYOffset

var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18

dropmenuobj.contentmeasure=dropmenuobj.offsetHeight

if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move up?

edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight

if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either?

edgeoffset=dropmenuobj.y+obj.offsetHeight-topedge

}

}

return edgeoffset

}

function populatemenu(what){

if (ie4||ns6)

dropmenuobj.innerHTML=what.join("")

}

function dropdownmenu(obj, e, menucontents, menuwidth){

if (window.event) event.cancelBubble=true

else if (e.stopPropagation) e.stopPropagation()

clearhidemenu()

dropmenuobj=document.getElementById? document.getElementById("dropmenudiv") : dropmenudiv

populatemenu(menucontents)

if (ie4||ns6){

showhide(dropmenuobj.style, e, "visible", "hidden", menuwidth)

dropmenuobj.x=getposOffset(obj, "left")

dropmenuobj.y=getposOffset(obj, "top")

dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px"

dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"

}

return clickreturnvalue()

}

function clickreturnvalue(){

if (ie4||ns6) return false

else return true

}

function contains_ns6(a, b) {

while (b.parentNode)

if ((b = b.parentNode) == a)

return true;

return false;

}

function dynamichide(e){

if (ie4&&!dropmenuobj.contains(e.toElement))

delayhidemenu()

else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))

delayhidemenu()

}

function hidemenu(e){

if (typeof dropmenuobj!="undefined"){

if (ie4||ns6)

dropmenuobj.style.visibility="hidden"

}

}

function delayhidemenu(){

if (ie4||ns6)

delayhide=setTimeout("hidemenu()",disappeardelay)

}

function clearhidemenu(){

if (typeof delayhide!="undefined")

clearTimeout(delayhide)

}

if (hidemenu_onclick=="yes")

document.onclick=hidemenu

That should atleast execute the PHP part correctly.

And that it doesn't work in IE or Opera is probably due to a bad script.

Re: Including PHP in JS

Nope, doesn't work.

Re: Including PHP in JS

*what* doesn't work? You're not really being descriptive.

Re: Including PHP in JS

Sorry.

With that code you just posted and using the method above, (<script type="text/javascript" src="js.php"></script>), the drop down menus do not work at all.

Re: Including PHP in JS

I have a feeling that's due to bad Javascripting, not the PHP tongue

Re: Including PHP in JS

It works fine in Firefox, just not in IE (and in Firefox, rolling over the home image makes it freak out tongue)

Re: Including PHP in JS

OK, so if this should work: I'll go through the js... or at least get someone else to go through it for me.

Re: Including PHP in JS

Or find yourself a decent script? tongue

Re: Including PHP in JS

This is as best as I could get, for free.