2016-03-27 2 views
0

Ich möchte über Zend Tag Component wissen.Was ist die Verwendung von Zend-Tag-Komponente in Zend Framework?

Was ist das? Wie benutze ich das in meinem Projekt?

Angenommen, ich habe folgende drei Tabellen: Beiträge - id, name tags - id, name posts_tags - id, post_id, tag_id

Wie kann ich diese Komponente verwenden, um einen Tag-Cloud zu erstellen? Was ist Gewicht?

Ich habe diese geprüft:
http://framework.zend.com/manual/current/en/modules/zend.tag.introduction.html

http://framework.zend.com/manual/current/en/modules/zend.tag.cloud.html

+0

Sie vielleicht ein bisschen präziser auf die spezifischen Teil auf der Dokumentation, die Sie zusätzliche Informationen benötigen Sie sein wollen. Wenn Sie sich die zweite Dokumentationsseite ansehen, sehen Sie bereits den häufigsten Anwendungsfall für diese Funktion: Erstellen von Tag-Clouds. – Fge

+0

@Fge Ich habe meinen Beitrag aktualisiert. –

Antwort

3

Als Beispiel haben Sie zwei Tags: Tag A 1000 mal vorkommend, Tag B nur einmal vorkommend und Tag C 50 mal vorkommend. Die erste Idee könnte sein, dass die Anzahl der Vorkommen die Schriftgröße ist. Nun, das ist nicht sehr hilfreich, da wir Tag A bei Schriftgröße 1000 und Tag B bei Schriftgröße 1 haben. Stattdessen möchten Sie wahrscheinlich so etwas wie:

  • Der Tag am meisten vorkommenden sollte font-size 25
  • Der Tag vorkommende mindestens haben sollte font-size 10
  • Alle anderen Tags haben sollte gleichmäßig zwischen in Schrift verbreitet werden Schritte 2

Dies ist, wo dieses Modul an Ort und Stelle kommt. Das grundlegende Problem, das dieses Modul zu lösen versucht, ist das Mapping von how often a tag occurs to how large you want it to be displayed in relation to other tags. Oder in eine Funktion gestellt werden: calculateBoundedFontSize(count($tag)).

In Zend\Tag\ wird dies durch Gewichte behandelt (wie viel ein Tag auftritt) und Werte (die Schriftgröße Wert in Bezug auf das Gewicht eines Tag):

  • Zuerst haben wir eine Liste von Tags erstellen, die jeweils zu geben ein Gewicht (z. B. die Anzahl der Vorkommen).
  • Zweitens teilen wir dem Modul mit, ein Array von erlaubten Schriftgrößen zu den Objekten in Bezug auf die Anzahl der Vorkommen zuzuordnen.

Die zweite wird von dieser Linie in der Dokumenation getan:

$list->spreadWeightValues(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); 

die im Grunde das Modul teilt den Tag occoring die meisten eine Schriftgröße von 10, die eine occoring mindestens eine Schriftgröße zu geben, 1. Alles dazwischen ist entsprechend verteilt. Um zum ursprünglichen Beispiel zurückzukehren, erhält Tag A eine Schriftgröße von 10, Tag B eine Schriftgröße von 1 und Tag C eine Schriftgröße von 2.

Der Grund, warum die Dokumentation nicht speziell über count und font size spricht, ist für die Abstraktion. Anstatt die Anzahl von Vorkommen zu nehmen, könnten wir einen anderen Faktor verwenden, um die Wichtigkeit eines Gegenstands zu bestimmen (z. B. Wichtigkeit). Wir könnten auch einen fortgeschritteneren berechneten Wert verwenden, zum Beispiel könnten wir sagen, Featured Tags sind wichtiger und fügen zusätzlich zu der Zählung eine zusätzliche 1000 zu ihrem Gewicht hinzu. Für Werte gilt das Gleiche, es muss nicht eine Schriftgröße sein, sondern könnte auch für die Bestellung verwendet werden. Nur Zend\Tag\Cloud verwendet diese Gewichtungen und Werte als Schriftgrößen. Aber wir könnten einfach ein anderes Modul erstellen, das sie stattdessen zum Rendern einer geordneten Liste verwendet.

Für Ihre Situation würde das einfache Beispiel genügen bereits obwohl:

// Create a ItemList 
$list = new Zend\Tag\ItemList(); 

// Add all tags and their count to it 
foreach ($allTags as $tag) { 
    $list[] = new Zend\Tag\Item(array('title' => $tag, 'weight' => countTagOccurences($tag)); 
} 

// Assign font size values 
$list->spreadWeightValues(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); 


// Or to use the Zend\Tag\Cloud directly 
$cloud = new Zend\Tag\Cloud(
    array(
     'tagDecorator' => array(
      'decorator' => 'htmltag', 
      'options' => array(
       'minFontSize' => '1', 
       'maxFontSize' => '10', 
     ), 
    ), 

    'tags' => $list 
    ) 
); 
+0

danke für die erklärung die ist sehr sehr gut im vergleich zu zend-dokumentation. –

1

Die Dokumentation ist ziemlich klar (wenn auch nicht alles, was offensichtlich ist); vielleicht ist eine bessere Frage "Was ist Zend_Tag_Cloud?":

Zend_Tag_Cloud ist der Rendering-Teil von Zend_Tag. Standardmäßig enthält es eine Reihe von HTML-Dekoratoren, mit denen Sie Tag-Clouds für eine Website erstellen können. Sie erhalten aber auch zwei abstrakte Klassen, mit denen Sie eigene Dekoratoren erstellen und beispielsweise Tag-Clouds in PDF-Dokumenten erstellen können.

http://framework.zend.com/manual/1.12/en/zend.tag.cloud.html

https://en.wikipedia.org/wiki/Tag_cloud

HTH.

+0

@ Gomez. Ich habe meinen Beitrag aktualisiert. –