Joomla sayfasının HTML etiketine nitelikler eklemenin doğru yolu var mı?


11

Bazı Joomla makale sayfalarıma biraz daha gelişmiş işlevsellik eklemek için AngularJS kullanıyorum. Bu sayfalarda ng-app özelliğini <HTML>sayfamdaki etikete eklemem gerekiyor . Şu anda Joomla (v3.3) sayfalarımın normal HTML etiketi şuna benziyor;

<html prefix="og: http://ogp.me/ns#" xml:lang="en-gb" lang="en-gb">

ve şöyle görünmesini istiyorum;

<html prefix="og: http://ogp.me/ns#" xml:lang="en-gb" lang="en-gb" ng-app="dataManager">

Farklı sayfalar farklı bir ng-uygulama yönergesine ihtiyaç duyabileceğinden, bunun biraz dinamik olması gerekir. Joomla'da bunu yapmanın uygun bir yolu var mı?

Şu anda AngularJS aşağıdakileri kullanarak alma:

<?php 
    $document = JFactory::getDocument();
    $urlAngular = "http://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js";
    $document->addScript($urlAngular); 
?>

Verebileceğiniz her yardım için teşekkürler.


Şu anda AngularJS ve benzerlerini yalnızca bu sayfalara nasıl ekliyorsunuz?
David Fritsch

Ben PHP kod basit bir blok ile bu sayfalara AngularJS ekliyorum. Kullanılan kod; <pre> {source} <? php $ document = JFactory :: getDocument (); $ urlAngular = " ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js "; $ 'belge-> addScript ($ urlAngular); ?> {/ source} </pre>
drobertson

Karışık kod için üzgünüm. Düzenlemek zorunda 5 dakika içinde doğru bakmak için kod bloğu almak nasıl anlayamadım.
drobertson

@DougRobertson - Kod güncellenmesi için sorunuzu güncelleyebilirsiniz;) Sorunuzu buna göre düzenledim
Lodder

Yanıtlar:


5

Bunun systemgibi bir eklenti oluşturabilirsiniz :

class plgSystemAddAttr extends JPlugin
{
    public function onAfterRender()
    {
        $document = JFactory::getApplication();
        $htmlString = $document->getBody();

        $dom = new DOMDocument();
        libxml_use_internal_errors(true);
        $dom->loadHTML($htmlString);
        libxml_use_internal_errors(false);
        $htmlTag = $dom->getElementsByTagName('html')->item(0);

        $domAttribute = $dom->createAttribute('ng-app');
        $domAttribute->value = 'dataManager';
        $htmlTag->appendChild($domAttribute);

        $document->setBody($dom->saveHtml());
    }
}

Teşekkürler, aradığım şey bu. Sistem eklentisi üzerinde çalışacağım. Kısa vadede bu aynı şeyi makalenin içine gömülü PHP'den yapmak mümkün mü?
drobertson

DOMDocument, Html yapısına çok duyarlıdır. Belgeyi yükleyemezse, büyük bir şekilde başarısız olur ve küçük bir Html hatasını kurtarmanın bir yolu yoktur. Düz bir preg_replace tercih ederim .
Anibal

@ DooRobertson AFAIK, hayır mümkün değil. BTW AngularJS'yi bilmiyorum, ancak öznitelik istemci tarafında kullanılıyorsa, bunu istemci tarafında da tanımlayabilirsiniz. Bir jQuery örneği:$('html').attr('ng-app', 'dataManager');
Farahmand

@Fari Bunu yapmayı düşündüm, ama yük dizisi zor oldu. Eğer özellikle AngularJS başlamadan önce attr yerleşimini kontrol edebilirsem, o zaman fikriniz harika olabilir. Şimdiye kadar tavşan deliğinden aşağı inemedim.
drobertson

1

ng-appÖzniteliğe dinamik içerik eklemek için PHP kullanabilirsiniz .

Senin içinde \templates\yourtemplate\index.phpdosya, değişim

<html prefix="og: http://ogp.me/ns#" xml:lang="en-gb" lang="en-gb" ng-app="dataManager">

için

<?php
if ( condition ) {
   $ngapp = "dataManager";
} else {
   $ngapp = "somethingElse";
}
?>
<html prefix="og: http://ogp.me/ns#" xml:lang="en-gb" lang="en-gb" ng-app="<?php echo $ngapp ?>">

Bu yaklaşımı kullanarak eklemek istediğim her sayfa için kalıp şablonunu değiştirmem gerekir. Çalışır, ancak daha fazla sayfa ve ng-uygulama eklediğim için çok hantal. Ben nasıl bir javascript kitaplığına bir komut dosyası başvurusu eklemek benzer bir öznitelik eklemek için bir yol arıyorum. Bunu yapmanın bir yolu var mı?
drobertson

1
muhtemelen bir sistem eklentisi en kolay yol olacaktır. Oluşturulan html'yi istemciye sunmadan hemen önce işleyebilir ve hangi özniteliklerin sizin için uygun olduğunu belirlemek için tüm oturum verilerine sahip olabilir.
Riccardo Zorn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.