Startseite · Projekte · Kontakt · Impressum

Dojo Tooltips und Zend_Form

Angaben im Template

Für das Aussehen des Tooltips nutzen wir das Dijit Tundra-Theme.

<link href="/dijit/themes/tundra/tundra.css" rel="stylesheet" id="themeStyles" />

Damit es angewendet wird, erhält der Body-Tag die CSS-Klasse „tundra".

<body class="tundra">

Als letztes benötigen wir den JavaScript-Code. Um den Seitenaufbau zu beschleunigen (besonders in Google Chrome), kommt der Code am besten vor den schließenden Body-Tag.

<?php if ($this->dojo()->isEnabled()): ?>
<?php $this->dojo()
  ->setCdnBase(Zend_Dojo::CDN_BASE_GOOGLE)
  ->setDjConfigOption('parseOnLoad', true) ?>
<?php echo $this->dojo() ?>
<script type="text/javascript">
<!--
   dojo.require('dijit.Tooltip');
//-->
</script>
<?php endif ?>

Wir nutzen in diesem Fall keine lokale Installation, sondern die bei Google gehosteten Dateien.

Das Formular

Das Formular wird in einer eigenen Klasse konfiguriert. Hier exemplarisch das erste Element des Formulars aus dem Screenshot.

<?php
/**
 * Item settings
 * {@link http://www.scriptblogger.de/ }
 */
class Form_ItemSettings extends Zend_Form
{
    
/**
     * Constructor
     * 
     * @param object $view View object
     * @param array $options Form options
     */
    
public function __construct($view$options null
    {
        
parent::__construct($options);
        
        
Zend_Loader::loadClass('Zend_Form_Element_Text');
                
        
$this->setName('itemSettings');
        
$this->setDecorators(array(
                
'FormElements', array(
                    
'HtmlTag', array(
                        
'tag'   => 'dl'
                        
'class' => 'zend_form'
                        
)
                    ), 
                    array(
                        
'Description', array(
                            
'placement' => 'prepend'
                            
)
                        ),
                    
'Form'
                    
));
                    

        
$itemName = new Zend_Form_Element_Text('itemName');
        
$itemName->setRequired(true)
            ->
setLabel($view->instructionTooltip('itemName''itemNameQ''questionmark'))
            ->
setDescription($view->instructionTooltip('itemNameDescription''itemNameQ''tooltip'))
            ->
setDecorators(array(
                
'ViewHelper',
                
'Errors',
                array(
                    
'Description', array(
                        
'placement' => 'append'
                        
'escape' => false
                        
'tag' => 'span'
                        
)),
                array(
'HtmlTag', array('tag' => 'dd')),
                array(
'Label', array('tag' => 'dt''escape' => false)),
                ));
        
$this->addElement($itemName);        
    }
}

An setLabel() und setDescription() wird das Resultat des View-Helpers instructionTooltip() übergeben. Der Code von instructionTooltip() folgt weiter unten.

Standardmäßig wird HTML-Code in Label und Description in Sonderzeichen konvertiert und nicht ausgeführt. Um das zu verhindern, erhält der Decorator von Label und Description jeweils folgende Option:

'escape' => false

Der View Helper

Der View-Helper generiert den HTML-Code für das Fragezeichen und den Tooltip. Statt eines View-Helpers hätte man das sicherlich auch durch Erweiterung von Zend_Form lösen können. Der View-Helper soll aber auch später unabhängig von einem Formular in den Templates zum Einsatz kommen.

<?php
/**
 * Instruction tooltip
 * {@link http://www.scriptblogger.de/ }

 */
class GentleSource_View_Helper_InstructionTooltip
{
    
/**
     * Current view
     */
    
public $view;

    
/**
     * Get current view
     */
    
public function setView(Zend_View_Interface $view)
    {
        
$this->view $view;
    }

    
/**
     * Generate instruction tooltip HTML code
     * 
     * @param string $text Visible text
     * @param string $id   Connect ID 
     * @param string $mode label|description
     */
    
public function instructionTooltip($text$id$mode 'label')
    {
        if (
$mode == 'label') {
            return 
$this->view->translate($text) . 
                
' <span id="' $id '" class="instructionQuestionmark">' 
                
$this->view->translate('instructionQuestionmark') . '</span>';
        }
        if (
$mode == 'description') {
            return 
'<span dojoType="dijit.Tooltip" style="display:none;" connectId="' 
                
$id '" id="' $id '_tooltip">' $this->view->translate($text) . '</span>';
        }
    }
    
}

Der Parameter $text enthält den Text, der entweder als Label oder als Description angezeigt werden soll.

Der Parameter $id enthält die ID des HTML-Tags, mit dem das Tooltip verbunden werden soll. Beim überfahren des mit dieser ID gekennzeichneten HTML-Tags mit der Maus, wird der Tooltip angezeigt.

Der Parameter $mode enthält die Anweisung, ob der HTML-Code für das Label oder für die Description ausgegeben werden soll.

Bei $mode == 'label' wird das ursprüngliche Label erweitert. In unserem Beispiel enthält der Platzhalter „instructionQuestionmark" ein Fragezeichen und wird durch Zend_Translate automatisch ersetzt. Man kann dafür natürlich auch jeden anderen Text oder auch eine Grafik verwenden. Der CSS-Code für das Fragezeichen sieht übrigens wie folgt aus:

.instructionQuestionmark {
    font-size:0.7em;
    font-weight:normal;
    color:#00f;
    border:1px solid #7EABCD;
    -moz-border-radius:15px;
    -webkit-border-radius:15px;
    margin-left:0.5em;
    margin-right:2em;
    padding-left:4px;
    padding-right:4px;
}

Bei $mode == 'description' wird der Tooltip-Layer mit dem Beschreibungstext zurückgegeben.

Weitere Beispiele für die Nutzung von Tooltips auf dojotoolkit.org.

Zurück

Vorherige: Nicht jeder Webhoster steht auf Web 2.0
Nächste: PHP-Einstellungen bei Strato

Kommentare (5)

Vielen Dank für das Tutorial. Eine Frage habe ich aber. Bie mir funktioniert das ganze nicht wirklich. Liegt es möglicherweise daran, dass die methode intructionTooltip keinen $mode = "tooltip" hat? Wie bekomme ich die "?" quasi neben die Input-Felder.. Vielen dank schonmal. Philipp
#1 - Philipp - 24.04.2009 - 16:03
Hast du das Beispiel mal eins zu eins übernommen und ausprobiert? Ralf
#2 - Ralf - 24.04.2009 - 17:11
hat alles wunderbar geklappt. Danke vielmals!
#3 - Philipp - 11.05.2009 - 18:45
Funktioniert nicht
HI, Also ich hab es nicht eins zu eins genommen. Also ich hab ein Apllication Ordner Names test benannt und die Formular in mein Controller erzeugt. Aber Der Formular verusucht ständig auf das View Helper zugreifen (InstructionTooltip.php) und findet es nicht. Die habe ich genau so wie der beispiel in da Ordner test/view/helpers/InstructionTooltip.php und die Seite auch so um benannt class Test_View_Helpers_InstructionTooltip.. Der Dojo wir über mein Main Layout erzeugt. //-- Dojo einbinden if ($this->dojo()->isEnabled()){ echo $this->dojo()->addStylesheetModule('dijit.themes.tundra'); echo $this->dojo(); } Hab es lokal. was mache ich falsch ?
#4 - Soroosh - 30.03.2010 - 17:04
zxtbeepollen
Dojo Tooltips und Zend_Form - ScriptBlogger
#5 - zxtbeepollen - 18.10.2013 - 04:40

Abonnieren Sie unseren Feed:   RSS Feed RSS Feed  Atom Feed Atom Feed

.