» »

PHP variable scope

PHP variable scope

marjan_h ::

Ali lahko kdo prosim popravi sledečo kodo, ne razumem zakaj ne vidi spremenljivke "s":

	<?php 
							
							if ($rocka = opendir('./wp-content/themes/mojatema/slideshow/')) {
								global $s;
								$s = 0;

								while (false !== ($file = readdir($rocka))) {
									
									if (!($file == '.' || $file == '..')){
										
										if ($s == 0){
										        echo "<div class='item active'>";
										}
										else {
											echo "<div class='item'>";
										}
										
										echo "<img src='/wordpress/wp-content/themes/mojatema/slideshow/".$file."' />";
										echo "</div>";
									}
									$s++;
								}
								closedir($rocka);
								$s = 0;

							}
					  ?>


Hvala lepa.

Jarno ::

Poskusi deklarirati zunaj if-statementa.
Tole pogojno deklariranje zna biti nekonvencionalno.
#65W!

marjan_h ::

Sem poskusil, vendar ne dela. Zato sem dodal global oznako pa še vedno ne dela. Dela edino, da dam v if stavku npr.
0 == 0
.

marjan_h ::

Ta pogoj je seveda brezveze, želim le da upošteva vrednost spremenljivke "s". Kaj bi še lahko šlo narobe?

blay44 ::

Sej jo vidiš, samo skoz je 0.:)

marjan_h ::

Aja, pa res. Dobra! :D Hvala.

marjan_h ::

Evo še nekaj, kjer ne vidim napake:

		<?php
						$s_dir = size(scandir('./wp-content/themes/mojatema/slideshow/'));
								foreach (range(0, $nu) as $nu) {
									if ($nu == 0){
										echo "<li data-target='#my-slideshow' data-slide-to='" . $nu ."'class='active'></li>";
									}
									else {
										echo "<li data-target='#my-slideshow' data-slide-to='" .$nu . "'></li>";
									}
							}
					?>


V bistvu mi ne prikaže slik v my-slideshow. Kot vidite že programiram od 12.00 naprej, tako da je vsaka pomoč dobrodošla.

Delam pa tole: https://www.w3schools.com/bootstrap/boo... Nič kaj zapletenega.

blay44 ::

Zdej ne vem katero verzijo phpja uporabljaš. To je še bolj vžgano kot C
Če imaš razred pravilno določen, tarče(slike) tudi spremeni tiste pike pri nu-ju v vejice. Recimo?
Lahko pa, glede na verzijo $nu v rage funkciji šteka?

marjan_h ::

Vejice? Od kdaj ima pa php vejice za konkatenacijo? Jaz imam zadnjo verzijo Wordpressa, ne vem kero verzijo php-ja uporablja zadnji Wordpress? Je pa res, da že dolg časa nisem nič programiral, tako da če kdo vidi kakšno napako kje, ali pa mogoče kaj bi šlo narobe?...

blay44 ::

Probaj.
Ali pa najprej poskusi z direktnim zapisom, kot na tvoji podani strani.

Nekaj nimaš definirano. Najbrž?

marjan_h ::

Sem poskusil z vejicami. Še vedno ne dela.
Težko bi rekel, da nimam kaj definirano saj je vsa koda v bistvu ta, ki jo vidiš. Ostalo je HTML5, slike, bannerji. Nekaj kar že deluje.

Uporabljam pa visual studio code, sicer pa nikoli nisem debugiral php kode, verjetno rabim IDE, ali lahko kar s tem?

blay44 ::

Pol pa ostane samo še Echo in narekovaji?

smacker ::

(range(0, $nu) as $nu) ... tu je napaka, ker $nu prepišeš ;) Daj AS $nekaj_druga, pa potem seveda izpiši $nekaj_druga namesto $nu

marjan_h ::

Ne smacker, še vedno ne dela. Je pa res, da je bila tudi to napaka. Tudi ta koda ne dela:
V zakomentirani HTML kodi je primer kako mora končna koda izgledati. Če zakomentiranm php kodo, potem dela.


  <ol class="carousel-indicators">
					<?php
								foreach (range(0, 1) as $a) {
									if ($a == 0){
										echo "<li data-target='#my-slideshow' data-slide-to='" . 0 . "'class='active'></li>";
									}
									else {
										echo "<li data-target='#my-slideshow' data-slide-to='" . 1 . "'></li>";
									}
							}
					?>
					<!--
					<li data-target="#my-slideshow" data-slide-to="0" class="active"></li>
					<li data-target="#my-slideshow" data-slide-to="1"></li>
					<li data-target="#my-slideshow" data-slide-to="2"></li> -->
			  </ol>

kyusss ::

  <ol class="carousel-indicators">
					<?php
								foreach (range(0, 1) as $a) {
									if ($a == 0){
										echo '<li data-target="#my-slideshow" data-slide-to="0" class="active"></li>';
									}
									else {
										echo '<li data-target="#my-slideshow" data-slide-to=""></li>';
									}
							}
					?>
					<!--
					<li data-target="#my-slideshow" data-slide-to="0" class="active"></li>
					<li data-target="#my-slideshow" data-slide-to="1"></li>
					<li data-target="#my-slideshow" data-slide-to="2"></li> -->
			  </ol>

marjan_h ::

@kyusss Tudi tvoja koda ne dela :/ Ne vem zakaj samo statična HTML koda dela. Sicer pa ne vem kako to debugirat.

Miha 333 ::

Si vklopil prikaz vseh napak (tudi ravni warning in notice)?

marjan_h ::

Kje se to nastavi? V visual studio code ali na strežniku?

Miha 333 ::

Koda od kyuss-a meni dela, verjetno pa je mišljeno tako:
echo '<li data-target="#my-slideshow" data-slide-to="' . $a . '"></li>';

Strogo po pravilih gledano bi moral uporabiti primerjalni operator ===, saj primerjaš identične vrednosti. O razliki med == in === si preberi v manual-u. Sicer v tem primeru ne vpliva na rezultat, a enkrat te zna boleti glava zaradi tega.

Seveda tole ne bo delovalo:
echo "<li data-target='#my-slideshow' data-slide-to='" . 1 . "'></li>";

Prav je:
echo "<li data-target='#my-slideshow' data-slide-to='" . '1' . "'></li>";


marjan_h je izjavil:

Kje se to nastavi? V visual studio code ali na strežniku?

Lahko kar na začetku kode: http://php.net/manual/en/function.error...

Zgodovina sprememb…

  • spremenilo: Miha 333 ()

marjan_h ::

Hvala za nasvete. Sem popravil.

marjan_h ::

Še eno težavo imam. Ugotovil sem da podajanje poti v nizu ni najbolj primerno. Ampak ne znam pravilno sintaktično zapisati naslednjega ukaza:
echo '<img src="<?php echo get_template_directory_uri(); ?> /slideshow/"' .$file. "' />';


Stvar je preprosta, ampak že dolgo časa nisem programiral v php.

Hvala.

Markus386 ::

echo "<img src=\"" . get_blabla_uri() . "/slideshow/" . $file . "\" />";

smacker ::

< ? php echo ... ? > rabiš v html-ju, tu si pa že v php in echo, zato preprosto zlepiš stringe z operatorjem . ;)
echo '<img src="' . get_template_directory_uri() . '/slideshow/' . $file . '" />';

marjan_h ::

Hvala, sem ugotovil da funkcija:
get_template_directory_uri()


ne vrne ničesar. Uporabil sem getcwd(). Ampak to verjetno ni v slogu Wordpressa? Hočem da je tema prenosljiva. Torej imam temo Mojatema in noter so posamezni php fajli ter direktoriji kot je slideshow, v katerem so slike. Torej kaj uporabit, da bo delovalo za temo? Ker getcwd() vrne celotno pot. In ne relativno. Ne vem pa zakaj get_template_directory_uri() ne vrne ničesar. Vsaj relativno bi, če že.

blay44 ::

Kar se konča z _uri, ti bo funkcija vrnila javni naslov. Ne pa naslova teme shranjene v serverju.
Ne vem pa kako je v WPju.