| Autor | Zpráva | ||
|---|---|---|---|
| moom Profil |
#1 · Zasláno: 29. 4. 2014, 17:48:55
Lidi zlatí zatím se učím PHP a napsal jsem si tento kód pro Wordpress a mám pocit, že
to určitě půjde napsat nějak jednodušeji, ale moc netuším jak. Můžete mně prosím nakopnout, popokopnout. <?php
if (is_category('1')):
query_posts('cat=1');
elseif (is_category('3')):
query_posts('cat=3');
elseif (is_category('4')):
query_posts('cat=4');
elseif (is_category('5')):
query_posts('cat=5');
elseif (is_category('6')):
query_posts('cat=6');
elseif (is_category('7')):
query_posts('cat=7');
elseif (is_category('8')):
query_posts('cat=8');
elseif (is_category('9')):
query_posts('cat=9');
elseif (is_category('11')):
query_posts('cat=11');
elseif (is_category('12')):
query_posts('cat=12');
elseif (is_category('13')):
query_posts('cat=13');
elseif (is_category('14')):
query_posts('cat=14');
else:
query_posts();
endif;
?> |
||
| juriad Profil |
To fakt chceš první kategorii, která existuje? Ty snad obecně nevíš, jaké má číslo?
$found = false;
$cats = array(1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14);
foreach ($cats as $cat) {
if (is_category($cat)) {
query_posts('cat='.$cat);
$found = true;
break;
}
}
if (!$found) {
query_posts();
} |
||
| rafej Profil |
#3 · Zasláno: 29. 4. 2014, 18:25:39
Tohle by mohlo být efektivnější
$curCatID = the_category_ID($echo=false);
$cats = array(1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14);
if (in_array($curCatID,$cats)){
query_posts('cat='.$curCatID);
}else{
query_posts();
} |
||
| juriad Profil |
#4 · Zasláno: 29. 4. 2014, 18:29:58
rafej:
Ano, vyhýbáš se cyklu, ale tvůj kód skutečně ekvivalentní? Nemám žádné zkušenosti s WP. Moc se mi nelíbí to přiřázení při volání funkce the_category_ID. To je asi chybka, ne? |
||
| rafej Profil |
#5 · Zasláno: 29. 4. 2014, 19:01:42
juriad:
Místo $curCatID = the_category_ID($echo=false); lze použít novější if (is_category()) {
$category = get_category(get_query_var('cat'));
$curCatID = $category->cat_ID;
}ale první zápis je spolehlivější, i když zastaralý. Funkce the_category_ID() bez parametru vypisuje rovnou na výstup, takto uloží hodnotu do proměnné.
|
||
| juriad Profil |
#6 · Zasláno: 29. 4. 2014, 19:06:29
OK, já WP neznám, z toho důvodu jsem odpověděl z hlediska znalostí PHP.
Ale proč hodnotu false ukládáš do proměnné $echo? Pochopil bych něco jako toto z důvodu dokumentace: $curCatID = the_category_ID(/*echo*/ false); |
||
| rafej Profil |
#7 · Zasláno: 29. 4. 2014, 19:19:49
Máš pravdu, v závorce stačí jen
false, zůstalo mi to tam jen při kopírování z poznámek (pro edukační účely ponechávám i názvy parametrů).
|
||
| moom Profil |
#8 · Zasláno: 30. 4. 2014, 07:35:50
Lidi zlatí děkuji, děkuji, obě dvě pomoci jsou pro mě důležité
a konečně začínám trošku poodhalovat kouzlo PHP. Takže pokud to nepletu, budou fungovat oba příklady, jenom u druhého je to přímo pro WP, kde se berou zjištěné kategorie. Koukám na různé návody k PHP a všiml jsem si, že docela často lidi píší $cats as $cat něco množného na jednotné,
k čemu se to prosím přesně hodí? Proč se rovnou nenapíše $cats.
Viz první pomoc od Juriada. if (is_category()) {
$category = get_category(get_query_var('cat'));
$curCatID = $category->cat_ID;
}
$cats = array(1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14);
if (in_array($curCatID,$cats)){
query_posts('cat='.$curCatID);
}else{
query_posts();
}Ještě jednou díky za popokopnutí! |
||
| juriad Profil |
#9 · Zasláno: 30. 4. 2014, 09:34:35
http://cz2.php.net/control-structures.foreach
Tedy foreach je cyklus, který prochází nějaké pole a každý prvek pole postupně uloží do nějaké proměnné. V mém přpadě prochází pole $cats (všimnul jsi si správně, že jsem v názvy použil množné číslo pro přehlednost; proměnná obsahuje těch kategorií více) a prvky postupně ukládá do proměnné $cat (jednotné číslo). To as je klíčové slovo oddělující tyto dvě části a umožňující čtení zápisu: foreach member of $cats accessed as $cat do ... česky: pro každý prvek $cats přístupný jako $cat udělej ... $cisla = array(1,2,3,5);
foreach ($cisla as $cislo) {
echo 2 * $cislo, ' ';
}
# vypíše 2 4 6 10 |
||
| peta Profil |
Uplne nejrychlejsi konstrukce je if-elseif-return u funkce.
In_array, ikdyz velmi elegantni je strasne pomala, lepsi je pouzit isset (array_keyexist) pro pole s indexy. Takze, kdybys in_array pouzival pro vetsi mnozstvi, rekneme 100-1000 kategorii, tak to neni moc vyhodne. $pole = array( 1 => '', 2 => '' ); |
||
| moom Profil |
#11 · Zasláno: 30. 4. 2014, 15:43:19
juriad:
Děkuji už je mně je to jasné. Paráda, to se hodí, teda to se musí znát :), Děkuji, děkuji peta: no moc tomu nerozumím, to je prosím na ten můj první příklad? |
||
| Tori Profil |
#12 · Zasláno: 30. 4. 2014, 22:29:18
moom:
peta chtěl říct, že je rozdíl mezi hledáním hodnoty v poli (funkce in_array nebo array_search) a hledáním klíče / indexu (funkce isset nebo array_key_exists). Když mám pole $pole1 = array(2 => 'dva', 3 => 'tri', 'vcera' => 'utery'); a chci zjistit, jestli tam je hodnota "utery", tak PHP dělá něco podobného jako juriad v [#2] - musí to pole projít a porovnat hodnotu každého prvku, jestli to je "utery". Kdežto když chci zjistit, jestli v tom samém poli je klíč "vcera", tak je to rychlejší, protože PHP neprochází celé pole (má ty klíče interně uložené nějak jinak). Je dobře o tomhle rozdílu vědět, ale reálně se to projeví až při velkých polích dat.
|
||
|
Časová prodleva: 12 let
|
|||
0