View Issue Details

IDProjectCategoryView StatusLast Update
0000237Adventure PHP FrameworkCode-Verbesserung // Code improvementpublic2019-02-04 19:46
ReporterCoach83Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionopen 
Product Version2.1.1 
Target VersionFixed in Version 
Summary0000237: Htmlheader if Anweisungen
DescriptionDie htmlheader-Erweiterung sollte mit einem Feature ausgestattet werden, Skripte und Stylesheets anhand von Abhängigkeiten zu laden.
Beispielsweise ist folgendes momentan nicht möglich:

<!--[if lt IE 9]><script src="/javascripts/ie.min.js"></script><![endif]-->
<!--[if !IE]> --><htmlheader:addstaticjs file="/2.0.3/jquery.min.js" /><!-- <![endif]-->
<!--[if lte IE 9]><htmlheader:addstaticjs file="/1.8.3/jquery.min.js" /><![endif]-->

So werden alle Skripte geladen.

Eine Möglichkeit wäre es, anhand eines weitere Attributes die if-Kommentare zu laden.
TagsNo tags attached.
Codereferenz: ([Datei]:[Zeile])
Namespaceextensions

Activities

ChristianAchatz

2014-09-22 20:45

administrator   ~0000504

Gute Feature-Idee. Da es sich hierbei um eine Extension handelt: magst du dir mal Gedanken machen, wie das umsetzbar wäre? Meine ersten Ideen hierzu sind:

- Generischen Condition-Tag, den du mit den jeweiligen, bereits bestehenden Tags füllen kannst.
- Eigener Tag für Conditions, in den du andere Tags schachteln kannst und an Hand eines (Data-?)Attributs im Controller beeinflussen kannst.

Coach83

2014-09-23 07:09

reporter   ~0000505

Last edited: 2014-09-23 07:49

View 3 revisions

ich habs mir so gedacht - einziges Problem: der Delimiter wird z.b. bei so nem Konstrukt nicht korrekt gesetzt "<!-- <![endif]-->".
Da bricht das Script nach 20 Loops ab... Hast Du dazu ne Idee? Oder wolltest Du das anders umsetzen?

****edit *****
hab das jetzt etwas umgeschrieben mit diesem switch-Case ... So funktioniert das zwar - aber schön ist was anderes - vor allem wenn es mehr "Spezialfälle" gibt
*************


<htmlheader:adddynamicconditionaljscontent condition="!IE">
    window.jQuery || document.write('<script src="jquery2.0.3.js"></script>");
</htmlheader:adddynamicconditionaljscontent>
<htmlheader:adddynamicconditionaljscontent condition="lte IE 9">
    window.jQuery || document.write('<script src="jquery1.8.3.js"></script>");
</htmlheader:adddynamicconditionaljscontent>



.....


class HtmlHeaderAddDynamicConditionalJsContentTag extends Document {

    public function transform() {
        /* @var $header HtmlHeaderManager */
        $header = & $this->getServiceObject('APF\extensions\htmlheader\biz\HtmlHeaderManager');

        $condition = $this->getAttribute('condition');
        $conditionDelimiter = $this->getAttribute('conditionDelimiter');

        $node = new DynamicConditionalJsContentNode($this->getContent(), $condition, $conditionDelimiter);

        if (strtolower($this->getAttribute('appendtobody')) === 'true') {
            $node->setAppendToBody(true);
        }

        $node->setPriority($this->getAttribute('priority'));
        $header->addNode($node);

        return '';
    }

}


class DynamicConditionalJsContentNode extends JsContentNode implements JsNode {

    private $condition;
    private $conditionDelimiter;

    public function __construct($content, $condition, $conditionDelimiter) {
        parent::__construct($content);

        if ($conditionDelimiter == '') {
            $conditionDelimiter = "<![endif]-->";
        }

        switch ($condition) {
            case "!IE":
                $condition = "!IE]> --";
                $conditionDelimiter = "<!-- <![endif]-->";
                break;
        }
        
        $this->condition = $condition;
        $this->conditionDelimiter = $conditionDelimiter;
    }

    public function transform() {
        $str = "<!--[if " . $this->condition . ">";
        $str .= parent::transform();
        $str .= $this->conditionDelimiter;
        return $str;
    }

}

ChristianAchatz

2014-09-24 18:33

administrator   ~0000506

Hi Coach,

welche Version des APF setzt du ein bei der das abbricht? Was bricht ab? Der Tag oder der APF-Parser?

ChristianAchatz

2014-10-26 16:57

administrator   ~0000524

Randnotiz: ab IE 10 werden Conditional Tags scheinbar von Microsoft nicht mehr unterstützt. Das gilt es natürlich noch zu verifizieren.

ChristianAchatz

2019-02-04 19:46

administrator   ~0000896

Closing old issues that never got voted to be included in one of the next releases. If you are a reporter or are still interested in this topic, feel free to re-open it.

Issue History

Date Modified Username Field Change
2014-09-22 14:06 Coach83 New Issue
2014-09-22 20:44 ChristianAchatz Description Updated View Revisions
2014-09-22 20:44 ChristianAchatz Steps to Reproduce Updated View Revisions
2014-09-22 20:45 ChristianAchatz Note Added: 0000504
2014-09-23 07:09 Coach83 Note Added: 0000505
2014-09-23 07:49 Coach83 Note Edited: 0000505 View Revisions
2014-09-23 07:49 Coach83 Note Edited: 0000505 View Revisions
2014-09-24 18:33 ChristianAchatz Note Added: 0000506
2014-10-26 16:57 ChristianAchatz Note Added: 0000524
2019-02-04 19:46 ChristianAchatz Note Added: 0000896
2019-02-04 19:46 ChristianAchatz Status new => closed