PDA

Zobacz pełną wersję : własny szablon - override js data-main, jak?



jaman7
16-09-2016, 13:27
Mam takie pytanie jak dodać wstawienie js wraz z data-main czyli konfig dla reciurejs

ogólnie wstawienie recuirejs z data-main w head jest takie

<script data-main="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/js/main" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/js/vendor/require.js"></script>

a jak wstawić jako override do head
$doc->addScript(); aby uwzględnić data-main i czy w ogóle jest to możliwe
także jquery nie potrzebuje wprost z joomli, gdyż załatwia to recuirejs poprzez config main (biblioteka pluginów jquery, bootstrap, wow, domReady itp oraz inicjalizację dla wszystkich stron)
przykładowy template:


<?php
defined('_JEXEC') or die;

$app = JFactory::getApplication();
$doc = JFactory::getDocument();
$user = JFactory::getUser();
$this->language = $doc->language;
$this->direction = $doc->direction;

// Output as HTML5
$doc->setHtml5(true);
$doc->setMetadata('X-UA-Compatible', 'IE=edge');
$doc->setMetaData('viewport', 'width=device-width, initial-scale=1');
$doc->setGenerator('');

unset($doc->_scripts[JURI::root(true) . '/media/system/js/mootools-more.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/mootools-core.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/core.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/modal.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/caption.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-migrate.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/bootstrap.min.js']);

$doc->addStyleSheet('https://fonts.googleapis.com/css?family=Lato:400,700%7CSriracha&subset=latin-ext');
$doc->addStyleSheet('templates/' . $this->template . '/css/bootstrap.min.css');
$doc->addStyleSheet('templates/' . $this->template . '/css/style.css');

?>
<!DOCTYPE html>
<html lang="<?php echo $this->language; ?>">
<head>
<jdoc:include type="head" />
<script data-main="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/js/main" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/js/vendor/require.js"></script>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<jdoc:include type="modules" name="menu" />
<jdoc:include type="modules" name="logo" />
<jdoc:include type="modules" name="karuzela" />
<jdoc:include type="component" />
<jdoc:include type="modules" name="footer" />
<jdoc:include type="modules" name="endbody" />
</body>
</html>


takie rozwiązanie jak w template jest otyle złe ze jeśli dam inicjalizację skryptów to zawsze inicjalizacja jest powyżej czyli


<script type="text/javascript">
require(['main'], function () {
require(['page/strona']);
});
</script>
<script data-main="/template/xx/js/main" src="/template/xx/js/vendor/require.js"></script>

tymczasowo zrobiłem w ten sposób ze zainstalowałem dodatek "Sourcerer" i tworząc moduły ze skryptem umieszczam w pozycji "endbody" przed </body>
Z kolei "SriptsDown" odpada o ile działa ładnie przenosi skrypty przed </body> jeśli strona nie ma wymuszonego html5 to jest w porządku, natomiast gdy jest ustawiony html5 to z treści robią się krzaczki na stronie.

oraz jak wywalić scrypt JCaption tworzony przez joomle?

<script type="text/javascript">
jQuery(window).on('load', function() {
new JCaption('img.caption');
});
</script>

Jac
16-09-2016, 20:05
JCaption ostatnio usuwałem tak:



<?phpunset($this->_scripts[JURI::root(true).'/media/system/js/caption.js']);if (isset($this->_script['text/javascript'])){ $this->_script['text/javascript'] = preg_replace('%window\.addEvent\ (\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\' img.caption\'\);\s*}\);\s*%', '', $this->_script['text/javascript']);if (empty($this->_script['text/javascript']))unset($this->_script['text/javascript']);}?>

jaman7
16-09-2016, 21:00
Dzięki wielkie, działa Twój sposób usuwania jCaption tylko troche inaczej zastosowałem przez override ale oba sposoby działają identycznie

$this->_script['text/javascript'] = preg_replace('%jQuery\(window\).on\(\'load\',\s*fu nction\(\)\s*\{\s*new\s*JCaption\(\'img.caption\'\ )\;\s*\}\)\;\s*%', '', $this->_script['text/javascript']);
if (empty($this->_script['text/javascript'])) unset($this->_script['text/javascript']);


"data-main" trzeba sobie jednak darować tylko normalnie w head dopiąć jak mam teraz, bo joomla chyba nie przewiduje poprzez override z dopisaniem opcji data-main do js,