php in echo

Status
Niet open voor verdere reacties.

jtheiner

Gebruiker
Lid geworden
4 mrt 2010
Berichten
104
Hallo,

ik ben bezig met een schriptje te verbouwen. Het script laad automatisch alles uit een map, ik heb drie van deze scriptjes naast elkaar zitten. De eerste (het menu) pakt de map naam, en stuurt deze door naar het 2e en 3e. Die laten de inhoud zien.

Nu wil ik wanneer de button send (map naam) actief is (current) een andere kleur krijgt.

Daar heb ik een volgend mooi script voor:

PHP:
<div <?php if ($fileName == ',$image_dir,' OR $fileName == ',$image_dir,') { ?> id="button2-active" <?php } else if ($fileName != ',$image_dir,' OR $fileName == ',$image_dir.php,') { ?> id="button2" <?php } ?>><input type="submit" value="',preg_replace('/[.jpg]/','',$file),'" id="button2"/></div>

Nu krijg ik echter te zien op me site:

id="button2-active" id="button2" >"map naam"
id="button2-active" id="button2" > "map2 naam"

Hij leest het id dus niet goed. Wat moet ik daar veranderen? Het staat namelijk in een echo.

het gehele script:
PHP:
<?php
		
		/* settings */
		$image_dir = 'images/';
		$per_column = 1;
		
		
		
		/* step one:  read directory, make array of files */
		if ($handle = opendir($image_dir)) {
			while (false !== ($file = readdir($handle))) 
			{
				if ($file != '.' && $file != '..') 
				{
						$files[] = $file;
				}
			}
			closedir($handle);
				if(count($files))
				{
					rsort($files);
				}
			}
		
		/* step two: loop through, format gallery */
		if(count($files))
		{
			foreach($files as $file)
			{
				$count++;
				echo '
				<form action="producten3.php" method="post">
				<input type="hidden" value="',$image_dir,'',$file,'/" name="naam" id="naam"/>
				<div <?php if ($fileName == ',$image_dir,' OR $fileName == ',$image_dir,') { ?> id="button2-active" <?php } else if ($fileName != ',$image_dir,' OR $fileName == ',$image_dir.php,') { ?> id="button2" <?php } ?>><input type="submit" value="',preg_replace('/[.jpg]/','',$file),'" id="button2"/></div>
				</form>
				';
				if($count % $per_column == 0) { echo '<div class="clear"></div>'; }
			}
		}
		else
		{
			echo '<p>There are no categories on this page.</p>';
		}
		
		
?>
 
Het idee erachter heb ik niet helemaal begrepen.

Code:
if ($fileName == ',$image_dir,' OR $fileName == ',$image_dir,') {
Als je deze code wilt uitvoeren zal het niet goed gaan. Je controleert in een if-statement of een bestandsnaam gelijk is aan de string '',$image_dir,", terwijl ik denk dat je wilt controleren op $image_dir?

Daarnaast werkt "OR" niet in een if-statement in PHP. Dit zal "||" moeten wezen.

Misschien kan je beter uitleggen wat je idee achter jou script is.

Groeten vreugde
 
Gooi de vergelijking die je inline maakt
',$image_dir,' OR $fileName == ',$image_dir,') { ?> id="button2-active" <?php } else if ($fileName != ',$image_dir,' OR $fileName == ',$image_dir.php,')

eens er boven en laat het een single string opleveren. en die gebruik je in je echo regel.

Wat ik zo snel zag is dat je problemen maakt met je quots.

hou je echo simple, dat maakt het een stuk makkelijker te lezen.

PHP:
 if ($fileName == ',$image_dir,' OR $fileName == ',$image_dir,') 
    { $ id="button2-active" } 
else if ($fileName != ',$image_dir,' OR $fileName == ',$image_dir.php,') 
   { $ id="button2" }

echo '
                <form action="producten3.php" method="post">
                <input type="hidden" value="',$image_dir,'',$file,'/" name="naam" id="naam"/>
                <div id="'.$id.'"><input type="submit" value="',preg_replace('/[.jpg]/','',$file),'" id="button2"/></div>
                </form>
                ';
en nog iets, je gebruikt id van een div om ze te highliten. Maar een id kun je maar 1x op een site gebruiken.
Wat jij moet/wilt gebruiken is de class van het element.
Een class is ervoor om vaker op een pagina gebruikt te worden!

Dat kleine stukje code van je was een aardig rommeltje
 
Hallo!

Bedankt voor julie reacties.

Ik ga ze proberen na mijn vakantie (over 2 weken).
Ben dan weer terug en zal dit verder oppakken.

Bedankt alvast!
 
Nu wil ik wanneer de button send (map naam) actief is (current) een andere kleur krijgt.
Kan dat niet gewoon met css, waarbij je de background laat wisselen als de button actief is,
desnoods met een javascriptje onclick="wisselBgImg('button-id')" ?

Met vriendelijke groet,
CSShunter
 
We zijn weer terug in nederland.
Ik heb het als volgt opgelost:
PHP:
<div id="menu">

	<ul>
	
		<li <?php if ($fileName == 'producten.php' OR $fileName == 'producten3.php') { ?> class="normal-active" <?php } else if ($fileName != 'producten.php' OR $fileName == 'producten3.php') { ?> class="normal" <?php } ?>>
			<a href="<?php echo $basePath; ?>/producten.php">Producten</a>
		</li>
	
		<li <?php if ($fileName == 'blog.php') { ?> class="normal-active" <?php } else if ($fileName != 'blog.php') { ?> class="normal" <?php } ?>>
			<a href="<?php echo $basePath; ?>/blog.php">Blog</a>
		</li>
	
		<li <?php if ($fileName == 'contact.php') { ?> class="normal-active" <?php } else if ($fileName != 'contact.php') { ?> class="normal" <?php } ?>>
			<a href="<?php echo $basePath; ?>/contact.php">Contact</a>
		</li>
	
	</ul>

</div>

Zo kun je hem ook in de css aan.
Ook kun je dit met strings aanpassen zodat het in scriptjes werkt bij buttons ofzo.

Succes!
 
Je kunt het ook zoiets doen, voorbeeld van blog hieronder
Code:
<li class="normal<?php if ($fileName == 'blog.php') echo '-active'; ?>">
Is heel wat korter en overzichtelijker naar mijn idee.

Die else if conditie is uiteraard nergens nodig, daar zal die alleen komen wanneer de eerste if true terug gaf.
(alleen else zou dus genoeg zijn in jouw snippet)
 
list-items automatisch actueel met css

Yes. - Het kan ook zonder php, met alleen css en de goede "hooks" in de html:
  • Alle <li>'s krijgen hun eigen id, voor het gemak de pagina-naam (bv.: <li id="blog">).
  • Alle pagina's krijgen een class in de <body>, voor het gemak dezelfde naam (bv. <body class="blog">).
  • In de css zet je standaard de <li>'s op hun normale uiterlijk.
  • De current-style maak je door een rijtje te maken van de koppeltjes met dezelfde class- en id-naam:
    .blog #blog,
    .producten #producten,
    .contact #contact {
    /* current-style */​
    }
  • Omdat het koppeltje alleen maar op de eigen pagina aanwezig is, krijgt de <li> van de actuele pagina de current-style, en alle andere <li>'s niet.
Wat uitgebreider beschreven, en in de praktijk gebracht: knutselpagina-5.htm.
Daar is de truc twee keer toegepast: zowel voor het gebruiken van het goede submenu dat bij een pagina hoort, als voor het goede list-item in dat submenu.
Als het om een button gaat die niet in een <li> staat, gaat het op dezelfde manier: dan krijgt elke button de unieke id.

Met vriendelijke groet,
CSShunter

PS: het kan ook omgekeerd: met de id in de <body> en de classes in de <li>'s.
Kwestie van smaak: als er maar unieke koppeltjes gefabriekt kunnen worden! :)
  • Voordeel van classes in de <body>: dan kunnen er meerdere classes aan de <body> gehangen worden, zoals nodig is voor de dubbele toepassing op de knutselpagina.
 
Laatst bewerkt:
Een TPL-parser is parser die HTML en PHP van elkaar scheid, waardoor deze sneller geparst wordt. Het is netjes voor te programmeren en maakt je website sneller geladen. Het oogt ook professioneler.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan