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.