Avatar billede hrole Mester
04. april 2011 - 21:41 Der er 19 kommentarer og
3 løsninger

Ændring til eksternt javascript med php

Hej,

Jeg har en php-side, med bla. nedenstående javascript. Formålet er at man kan bladre, altså øge eller mindske variablen nr ved tryk på + eller -. Men jeg skal have rykket scriptet i et eksternt javascript-dokument - hvordan gør jeg det?

<?php
$nr = $_GET['nr'];
$first = 1;
$next = ($nr+1);
$prev = ($nr-1);

?>
<script type="text/javascript">
function goTo(event)
{
  if(event.keyCode == 109)
    location = "<?php echo $_SERVER['PHP_SELF'].'?nr='.$prev.'&artikel_id='.$artikel_id.'&forfat='.$forfat ?>";
  if(event.keyCode == 107)
    location = "<?php echo $_SERVER['PHP_SELF'].'?nr='.$next.'&artikel_id='.$artikel_id.'&forfat='.$forfat ?>";
}
if(document.attachEvent)
  document.attachEvent("onkeyup", goTo);
else
  document.addEventListener("keyup", goTo, false);
</script>
Avatar billede kdjweb Nybegynder
04. april 2011 - 22:22 #1
Du kan ændre adressen på filen vha. mod_rewrite.
eks. js.php bliver til js.js

der står en masse om det her:
http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html

et eksempel kunne være
RewriteRule ^js.php$ /js.js [NC]
eller
RewriteRule ^style.css$ /style.php [NC]
Avatar billede kdjweb Nybegynder
04. april 2011 - 22:23 #2
^ og så hente .js filen vha.

<script type="text/javascript" src="path/to/file"></script>
Avatar billede kdjweb Nybegynder
04. april 2011 - 22:24 #3
Det gik alt for hurtigt ;-)
RewriteRule ^js.js$ /js.php [NC]

beklager
Avatar billede hrole Mester
04. april 2011 - 22:37 #4
Tak for forslaget, men jeg har måske ikke været præcis nok i min formulering.

Jeg har en php-side som viser et billede, for at se næste eller forrige billede trykkes + eller - som ændrer variablen nr.

Det er foreløbig løst med ovennævnte script, som ikke er optimalt.

Hvis jeg skal have noget javascript kode som kan bladre på php-siden - hvordan gør jeg det? javascriptet skal være i en ekstern .js-fil og kaldes med <script type="text/javascript" src=""></script> i selve php-filen.

Jeg kan jo desværre ikke bare kopiere mit foreløbige script over i en js-fil pga. php-koden i scriptet.
Avatar billede kdjweb Nybegynder
04. april 2011 - 22:48 #5
Ok - forstod det sådan at problemet lå i at bruge php kode i en "ekstern" js fil.

Hvor får du $artikelid og $forfat fra
Avatar billede olsensweb.dk Ekspert
04. april 2011 - 22:49 #6
prøv dette, så kan du ligge functionen ud externt, du kan selvføgelig fjerne de 2 udkommenteret org linjer


<?php
// test data
$artikel_id = 2;
$forfat = 9;
$nr = 5;


//$nr = $_GET['nr'];
$first = 1;
$next = ($nr+1);
$prev = ($nr-1);
?>
<script type="text/javascript">
var loc = <?php echo '"'.$_SERVER['PHP_SELF'].'";' ?>
var prev = <?php echo $prev; echo ";" ?>
var next = <?php echo $next; echo ";" ?>
var artikel_id = <?php echo $artikel_id; echo ";" ?>
var forfat = <?php echo $forfat; echo ";" ?>


function goTo(event){
    if(event.keyCode == 109){
        location = loc + "?nr=" + prev + "&artikel_id=" + artikel_id + "&forfat=" + forfat; 
        // location = "<?php echo $_SERVER['PHP_SELF'].'?nr='.$prev.'&artikel_id='.$artikel_id.'&forfat='.$forfat ?>";
    }
    if(event.keyCode == 107){
        location = loc + "?nr=" + next + "&artikel_id=" + artikel_id + "&forfat=" + forfat; 
        // location = "<?php echo $_SERVER['PHP_SELF'].'?nr='.$next.'&artikel_id='.$artikel_id.'&forfat='.$forfat ?>";
    }
}

if(document.attachEvent)
  document.attachEvent("onkeyup", goTo);
else
  document.addEventListener("keyup", goTo, false);
</script>
Avatar billede kdjweb Nybegynder
04. april 2011 - 22:56 #7
function goTo(url, nr, artID, author, event)
{
  if(event.keyCode == 109)
    location = url+"?nr="+(nr-1)+"&artikel_id="+artID+"&forfat="+author;
  if(event.keyCode == 107)
    location = url+"?nr="+(nr+1)+"&artikel_id="+artID+"&forfat="+author;
}
if(document.attachEvent)
  document.attachEvent("onkeyup", goTo);
else
  document.addEventListener("keyup", goTo, false);


ved ikke hvordan du bruger den men f.eks.
$url = $_SERVER['PHP_SELF'];
$nr = $_GET['nr'];
$artID = 1;
$author = NULL;
onload="goTo(<?php echo $url?>, <?php echo $nr; ?>, <?php echo $artID; ?>, <?php echo $author; ?>);"
Avatar billede olebole Juniormester
04. april 2011 - 23:27 #8
<ole>

Der er ingen grund til at rewrite noget. En importeret JS-fil kan sagtens have en anden extension - f.eks. .asp, .aspx, .php, .jsp, etc. Til gengæld bør du indlede PHP dokumentet med at sætte en passende header:

    header("Content-Type: text/javascript");


/mvh
</bole>
Avatar billede hrole Mester
04. april 2011 - 23:39 #9
ronols: det var hele javascriptet jeg ønsker i eksternt js-dokument, så det er desværre ikke hele løsningen.

kdjweb: jeg har
function goTo(url, nr, artID, author, event)
{
  if(event.keyCode == 109)
    location = url+"?nr="+(nr-1)+"&artikel_id="+artID+"&forfat="+author;
  if(event.keyCode == 107)
    location = url+"?nr="+(nr+1)+"&artikel_id="+artID+"&forfat="+author;
}
if(document.attachEvent)
  document.attachEvent("onkeyup", goTo);
else
  document.addEventListener("keyup", goTo, false);
i en ekstern .js-fil, $url, $nr, $artID og $author i php-filen. Men så skal onload vel i .js-filel, ikke? Det giver mit oprindelige problem: der kan ikke indsættes php-kode i en .js-fil.
Avatar billede olebole Juniormester
04. april 2011 - 23:47 #10
Jo, som jeg lige har skrevet, skal du bare lade JS-filen være en PHP-fil:

<script type="text/javascript" src="din_fil.php"></script>
Avatar billede olebole Juniormester
04. april 2011 - 23:50 #11
- en JS-fil er bare en tekstfil. Outputtet fra PHP er en tekstfil. Bare du sætter Content-Type, kan du bruge alle typer server dokumenter
Avatar billede olebole Juniormester
04. april 2011 - 23:58 #12
Eksempel:

index.php:

<?php
$en_delstreng = "helt fint";
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript" src="din_jsfil.php"></script>
</head>
<body>

Indhold

</body>
</html>



din_jsfil.php:

<?php
header("Content-Type: text/javascript");
?>

var sStreng = "Dette fungerer <?php print $en_delstreng ?>";

window.onload = function() {
    alert(sStreng);
}

Avatar billede olebole Juniormester
05. april 2011 - 00:09 #13
En browser ser på et dokuments header for at afgøre, hvilken type dokument der er tale om, og hvad den skal stille op med det. Normalt er serveren sat til at serve PHP-dokumenter (eller ASP, ASPX, JSP) som HTML, hvorfor browseren behandler dem som sådan. De bliver sendt med text/html

Den er også sat til at serve JS-dokumenter som text/javascript og CSS-dokumenter som text/css. Derfor behandler browseren dem, som den gør. Det handler med andre ord ikke om fil extension, men om Content-Type (eller MIME-Type)
Avatar billede hrole Mester
05. april 2011 - 13:14 #14
olebole: tak for dine kommentarer - det var jeg ikke klar over.

Jeg har nu ændret min tidl. .js-fil til js.php med header. Derefter forsøgte jeg med mit oprindelige script - uden held. Ved tryk på + får jeg vist js.php.
Herefter forsøgte jeg med kdjweb og ronols bidrag - ligeledes uden held. Når jeg trykker + sker intet.
Avatar billede olsensweb.dk Ekspert
05. april 2011 - 16:19 #15
jeg har prøvet at omskrive mit eks, nr tælles op/ned i addresse linjen
index.php

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript" src="min_js.js"></script>
</head>
<body>
<?php
$artikel_id = 2;
$forfat = 9;
$nr = $_GET['nr'];
$next = ($nr+1);
$prev = ($nr-1);
echo '<script type="text/javascript">'; echo "\n";
echo 'var url = "'.$_SERVER['PHP_SELF'].'";'; echo "\n";
echo 'var prev = '.$prev; echo ";\n"; 
echo 'var next = '.$next; echo ";\n";
echo 'var artikel_id = '.$artikel_id; echo ";\n"; 
echo 'var forfat = '.$forfat; echo ";\n";
echo '</script> '; echo "\n";
?>
</body>
</html>


min_js.js

function goTo(event){
    if(event.keyCode == 109){       
        location = url + "?nr=" + prev + "&artikel_id=" + artikel_id + "&forfat=" + forfat; 
    }
    if(event.keyCode == 107){
        location = url + "?nr=" + next + "&artikel_id=" + artikel_id + "&forfat=" + forfat;         
    }
}
if(document.attachEvent)
  document.attachEvent("onkeyup", goTo);
else
  document.addEventListener("keyup", goTo, false);


@olebole: hvordan får du parset $en_delstreng fra index til din_jsfil.php ??, jeg får ikke udskrevet variablen med mindre jeg ligger den over i din_jsfil.php
Avatar billede hrole Mester
05. april 2011 - 23:34 #16
Men der ligger stadig en del af scriptet i php-delen, den ville jeg gerne have flyttet.
Avatar billede olebole Juniormester
06. april 2011 - 09:59 #17
ronols >> Det er da vist skrevet på et meget søvningt tidspunkt - for det kan man naturligvis ikke. Til gengæld kan du overføre GET-variabler gennem en querystreng ved importen af JS/PHP-filen:

<script type="text/javascript" src="din_jsfil.php?bla=noget"></script>
Avatar billede hrole Mester
06. april 2011 - 10:28 #18
Aha, oleboles sidste kommentar fik mig til at tænke løsningen. Jeg sendte variablerne med i querystrengen fra php-siden til js-siden og satte dem i location og ændrede PHP_SELF i mit oprindelige script. Det virker!

Jeg er lidt i tvivl om hvordan jeg skal fordele point. Det var egentlig oleboles kommentarer der i det væsentligste førte til løsningen, men ronols og kdjwebs forslag var som sådan ikke forkerte. Jeg foreslår pointfordeing: olebole 14, ronols 8 og kdjweb 8.
Avatar billede olebole Juniormester
06. april 2011 - 10:58 #19
Jeg samler ikke points længere, men tak for tilbudet  =)
Avatar billede hrole Mester
06. april 2011 - 11:06 #20
ok, så siger vi 10 til ronols, 10 til kdjweb og så tager jeg de sidste 10 selv.
Avatar billede olsensweb.dk Ekspert
06. april 2011 - 12:15 #21
svar
#17 >>"Til gengæld kan du overføre GET-variabler gennem en querystreng ved importen af JS/PHP-filen:"
ja :)
Avatar billede hrole Mester
06. april 2011 - 12:33 #22
svar
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

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