wtorek, 19 maja 2015

[UPGRADE][Blogger] Robimy system kategorii cz.3 - dynamicznie generowany nagłówek

TRUE
6980526829644944639
W części tej zajmiemy się wyświetleniem spreparowanego nagłówka dla posta. Dzięki naszemu kodowi nazwa kategorii i subkategorii pojawi się nad postem w postaci linka. Umożliwi to bardzo wygodną nawigację po naszej strukturze kategorii. Dodatkowo wyświetlimy tam liczbę wpisów znajdujących się w danej kategorii. Wszystko odbywać się będzie automatycznie za pomocą przygotowanego przez nas tutaj kodu. Przygotujmy zatem kilka nowych funkcji, które do tego wykorzystamy.

Kolejne funkcje

Funkcja getSubcatName() zwraca tytuł etykiety podkategorii za pomocą jej indeksu w tablicy. Pobiera najpierw NAZWĘ KLUCZA TABLICY Z ETYKIETĄ o indeksie = catIndex, a następnie za pomocą tego klucza zwraca resztę, np. wywołanie getSubcatName(4) zwróci z tablicy ciąg Wyrażenia regularne, wg zasady działania:


  1. tmpkey = counterNames[4] = PHP_wyrazenia_regularne
  2. subcategories['PHP_wyrazenia_regularne'] = new Array(4, 0, 'Wyrażenia regularne');
  3. return subcategories['PHP_wyrazenia_regularne'][2] = Wyrażenia regularne

[code]
function getSubcatName(catIndex)
{
 var tmpKey = counterNames[catIndex];
 return subcategories[tmpKey][2];
}[/code]

Co dalej?

Mając informacje o etykiecie jaką właśnie wyświetlamy, możemy wygenerować sobie nagłówek z jej nazwą, a także np. linkiem do kategorii nadrzędnej. Wykonamy to poniższą funkcją. Funkcja getHeader() jako argument pobiera jedynie tablicę z NAZWĄ ETYKIETY, której pierwszym [0] elementem jest nazwa etykiety.
[code]
function getHeader(label_name)
{
 var fullname = '';

 if(label_name[0] in categories) {

  fullname = categories[label_name[0]][0] + ' ('+ categories[label_name[0]][1] + ')' ; // a
  global_label =  label_name[0]; // b

 } else {

  if(label_name[0] in subcategories) {
 
   var tmpParentIndex = parseInt(subcategories[label_name[0]][1]); //a
   var tmpParentLabel = getCatLabel(tmpParentIndex); //b
   global_label = tmpParentLabel; //c
   global_sublabel = label_name[0]; //d
 
   fullname = '<a href="http://phpmajster.blogspot.com/search/label/' + tmpParentLabel +'">' + categories[tmpParentLabel][0] + '</a> / ' + subcategories[label_name[0]][2] + ' ('+ getCount(label_name[0]) +')'; // e
  }  
 }
 return fullname;
}[/code]

Przeanalizujmy jej działanie:
[code]
function getHeader(label_name)
{
 var fullname = '';
 /*
 Na początku sprawdzamy, czy NAZWA ETYKIETY znajduje się w tablicy z kategoriami (jako klucz).
 Tym samym sprawdzamy, czy badana etykieta jest kategorią, czy podkategorią.
 */

 if(label_name[0] in categories) {

  /*
  Sprawdziliśmy, okazało się, że etykieta należy do nadrzędnej kategorii, wygenerujemy zatem nagłówek z jej nazwą, a w nawiasie podamy łączną ilość postów oznaczonych tą właśnie etykietą i etykietami jej podkategorii (a).
  Na koniec przypiszemy NAZWĘ ETYKIETY do globalnej zmiennej global_label, do wykorzystania w innych miejscach kodu (b):
  */
  fullname = categories[label_name[0]][0] + ' ('+ categories[label_name[0]][1] + ')' ; // a
  global_label =  label_name[0]; // b

 } else {

  if(label_name[0] in subcategories) {
 
   /*
   A tutaj okazuje się, że etykieta należy jednak do podkategoriii.
   Na początek pobierzemy index kategorii nadrzędnej (a) oraz jej nazwę (b).
   Na koniec przypiszemy NAZWĘ ETYKIETY kategorii nadrzędnej do globalnej zmiennej global_label, a podkategorii do global_sublabel -  do wykorzystania w innych miejscach kodu (c i d) ifinalnie wygenerujemy nagłówek z linkiem zarówno do kategorii nadrzędnej jak i podkategorii (e):
   */
 
   var tmpParentIndex = parseInt(subcategories[label_name[0]][1]); //a
   var tmpParentLabel = getCatLabel(tmpParentIndex); //b
   global_label = tmpParentLabel; //c
   global_sublabel = label_name[0]; //d
   //console.log(global_label);
 
   fullname = '<a href="http://phpmajster.blogspot.com/search/label/' + tmpParentLabel +'">' + categories[tmpParentLabel][0] + '</a> / ' + subcategories[label_name[0]][2] + ' ('+ getCount(label_name[0]) +')'; // e
  }  
 }
 return fullname;
}[/code]


Funkcja getHeaderSub() działać będzie podobnie jak powyższa, z tą różnicą, że tutaj sprawdzamy od razu podkategorie i dodatkowo generujemy link do podkategorii (w funkcji powyżej generowaliśmy tylko link do kategorii nadrzędnej, podkategorię wyświetlając jedynie jako informację)
[code]
function getHeaderSub(label_name)
{
 var fullname = '';
  if(label_name[0] in subcategories) {
 
   var tmpParentIndex = parseInt(subcategories[label_name[0]][1]);
   var tmpParentLabel = getCatLabel(tmpParentIndex);
   global_label = tmpParentLabel;
   global_sublabel = label_name[0];
 
   fullname = '<a href="http://phpmajster.blogspot.com/search/label/' + tmpParentLabel +'">' + categories[tmpParentLabel][0] + '</a> / <a href="http://phpmajster.blogspot.com/search/label/' + label_name[0] +'">' + subcategories[label_name[0]][2] + ' ('+ getCount(label_name[0]) +')</a>';
  }  

 return fullname;
}[/code]

Brak komentarzy:

Prześlij komentarz

Masz sugestię? Znalazłeś błąd? Napisz komentarz! :)

webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji