Jump to content
php.lv forumi

printf iekš PHP un css klases vai id piešķiršana


BaLTais

Recommended Posts

<?php
include("blocks/db.php");

$result = mysql_query("SELECT title,id FROM settings");      
$myrow = mysql_fetch_array($result);

print ('<ul class="nav"> ');
do 
{     
printf ("<a href='index.php?id=%s'>%s</a>",$myrow["id"],$myrow["title"],"</li>");
}
while ($myrow = mysql_fetch_array($result));
print ("</ul> ");
?> 

 

Domāju, ka Jums ar šo kodu viss ir skaidrs!

 

- Tas man izvada menu(pogu uzrakstus ar linkiem).

Viss strādā lieliski,ar jau piešķirto klasi,bet nezinu kā lai pogai piešķir citu izskatu, kad tā ir "aktīva". Skaidrs ka ar CSS! Bet kā lai to ieliek šajā kodā?

Kaut kādu atsevišķu pārbaudi taisīt, jo cikl izpildoties piešķir pie izvades tikai vienu konkrētu klasi!!!?

 

Paldies

Edited by BaLTais
Link to comment
Share on other sites

Iekļauj to kodu code tagos, lai vieglāk pārskatāms.

 

Vienam elementam var norādīt vairākas klases, piemēram <elem class="klase1 klase2 klase3">

(tev tur nav <li> tags pazudis??)

 

Es rakstītu šādi:

<?php
$result = mysql_query("SELECT title,id FROM settings");

$sel_id = isset($_GET['id']) ? (int)$_GET['id'] : 0; //izvēlētais id

$html_list = ""; //te glabāsies sarkasts

while($myrow = mysql_fetch_assoc($result)){
	$html_list .= "
		<li" . ($sel_id === $myrow["id"] ? " class=\"selected\"" : "") . ">
			<a href='index.php?id={$myrow["id"]}'>{$myrow["title"]}</a>
		</li>
	";
}

//tur kur vajag, izvadam
echo "<lu class=\"nav\">$html_list</ul>";
?>

 

Piezīmes: nesaprotu, kāpēc cilvēki lieto do-while tur kur to nevajag, tas tikai pasliktina uztveramību. Un cikls arī izpildīsies, ja $row būs false (nav ierakstu), jo while nosacījums ir tikai beigas.

 

print funkcija arī ir diezgan oldskūl...

 

mysql_fetch_array vietā var lietot mysql_fetch_assoc, lai nedublējas dati masīvā, kurus tāpat neizmanto...

Edited by briedis
Link to comment
Share on other sites

atvaino , bet man tas ir next level vēl tikai un tik vienkārši neizprotu šo kodu.. :)

Paskatījos googlē - jāpatrenējas ar dažādiem piemēriem, bet nu to pēc tam.

 

-Kurā momentā šeit mainās klase (tiek izcelts attiecīgais title), kad atvērta ir attiecīgi, teiksim, ..index?id=2 sadaļa , bet pārējiem paliek default stils (t.i. - nav)?

 

P.S. Ceru ka izsakos pietiekoši korekti, jo nu jau visa nakts ir pavadīta buroties pa php un visādām googles saitēm - galva vairs nava īsti skaidra...

Edited by BaLTais
Link to comment
Share on other sites

briedis, Tu esi kļūdiejies ar koda rakstīšanu, jo nav <ul> atvēršanas taga un pēdējam elementam nav </li> slēgšanas taga.

vajadzētu sādā redakcijā:

<?php
       $result = mysql_query("SELECT title,id FROM settings");

       $sel_id = isset($_GET['id']) ? (int)$_GET['id'] : 0; //izvēlētais id

       $html_list = "<ul>"; //te glabāsies sarkasts

       while($myrow = mysql_fetch_assoc($result)){
               $html_list .= "
                       <li" . ($sel_id === $myrow["id"] ? " class=\"selected\"" : "") . ">
                               <a href='index.php?id={$myrow["id"]}'>{$myrow["title"]}</a>
                       </li>
               ";
       }

       //tur kur vajag, izvadam
       echo "<li class=\"nav\">$html_list</li>";
       echo "</ul>";
?>

 

BaLTais, lai šiem rakstiem mainītos skats, tad ir jāzmanto CSS.

Vienkāršakais variants ir šāds:

li {
   display:inline;
   border:1px solid #000;
   background-color: #D0D0D0;
}
li:hover {
   border:1px solid #000;
   background-color: lightyellow;
}
li.selected {
   border:1px solid #000;
   background-color: red;
}
ul {
   display:inline;
}

Tad šie raksti smuki stavēs vienā rindā. Uzbraucot ar peli uz kāda raksta, tas mainīs krāsu. Izvēlētajam rakstam uzreiz būs cita krāsa.

Varbūt ir vērts sākt ar pašiem pamatiem un izlasīt kādu gramatu par šo tēmu? Zvaigznei pat ir grāmata par šo tēmu - Tīmekļa lapu veidošana. HTML un CSS. Tur arī smuki viss ir par CSS aprakstīts, pat ar piemēriem. Un galvenais, latviski.

Link to comment
Share on other sites

mysql_fetch_array vietā var lietot mysql_fetch_assoc, lai nedublējas dati masīvā, kurus tāpat neizmanto...

Par sho, gan PHP gan Mysql atrdarbiibas zinja ieguvums ir ljoti tuvinaats Nullei, faktiski netverams pat pie lieliem datu apjomiem.

Bet no logjikas viedoklja, jaa piekriitu.

P.S. Tiiri teoretiski jau atrdarbiiba palielinas, jo nav jaizpilda papildus datu masiivs...

Link to comment
Share on other sites

ABU, es kļūdījos tikai vietā, kur pie echo beigās uzrakstīju echo "<li class=\"nav\">.., nevis echo "<ul class=\"nav\">, tīri aiz neuzmanības...

 

Grey_Wolf, jā, nu es neteicu, ka būs mega ieguvums, bet kaut vai debugošanas ziņā - print_r($row), stulbi izskatās, kad viss dublējas :))

 

 

Baltais, es tur izmantoju ternary operatoru, jeb, inline IF'u.

 

Piemērs:

$var = true;

if($var){
 $a = 1;
}else{
 $a = 2;
}

//īsāk sanāk:
$a = $var ? 1 : 2;
// $a = (izteiksme) ? vērtība_ja_izpildās : vērtība_ja_Neizpildās;

 

Te vairāk: http://php.net/manual/en/language.operators.comparison.php

Edited by briedis
Link to comment
Share on other sites

 Pirms liku savu komentāru, pābaudīju HTML'u un tur viss strādā.

 

Slinkums man tagad rakstīt iekš PHP visu izvadu, tāpēc ielieku pliku HTML kodu, kuru pats pēc tam varēsi apstrādāt un iekļaut iekš PHP kā tev pašam vajag.

 

<html>
<head>
<style type="text/css">
li {
    display:inline;
    border:1px solid #000;
    background-color: #D0D0D0;
}
li:hover {
    border:1px solid #000;
    background-color: lightyellow;
}
li.selected {
    border:1px solid #000;
    background-color: red;
}
ul {
    display:inline;
}
</style>
</head>
<body>
<ul>
<li ><a href='index.php?id='>aaaa</a></li>
<li class="selected"><a href='index.php?id='>bbb</a></li>
<li ><a href='index.php?id='>ccc</a></li>
<li class="nav">$html_list</li>

</ul>

</body>
</html>

 

Papildinājums: to es pārbaudīju ar Opera pārlūku. Iespējams, ka ar citu pārlūku vajag savādāk apstrādāt CSS pazīmes.

 

 

Edited by ABU
Link to comment
Share on other sites

Pārbaudīju uz Explorer'a - jā, tur šis gadījums nestrādā.

Ja vajaga veidot menu stila sarakstu, tad man pašam labāk patīk izmantot tikai <a href>...</a> objektus, piemēram:

<html>
<head>
<style type="text/css">
.nav {
    border:1px solid #000;
    background-color: #D0D0D0;
}
.nav:hover {
    border:1px solid #000;
    background-color: lightyellow;
}
.selected {
    border:1px solid #000;
    background-color: red;
}
</style>
</head>
<body>
<a class="nav" href='index.php?id='>aaaa</a>
<a class="nav selected" href='index.php?id='>bbb</a>
<a class="nav" href='index.php?id='>ccc</a>
<a class="nav" href='#'>$html_list</a>

</body>
</html>

 

Tur vēl var spēlēties ar atsarpēm, lai attēlotos korekti - viens blakus otram.

Vēl var visiem iekš <li> ielikt <a href>...</a> objektus un visu CSS apstrādi veikt ar šiem <a href> objektiem. Tad arī ar Explorer'u vajadzētu attēloties korekti.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...