Foren / National / Russian / Модули и плагины / Как создать новые tpl страницы в плагине

vpktz
#1 29. Dezember 2018, 11:09

Хочу создать пару страниц, для контактов и пользовательских соглашений например. В общем отдельные. 

Пытался через модуль page но там почему что половина html тегов не срабатывает, не сограняется. И не получается сделать красивую страницу.

Просто так tpl страницу в котонти не сделаешь, и я решил сделать дефолтный плагин как указано  тут https://cotonti.cmsworks.ru/index.php?e=page&c=tutorials&al=hello   и на его базе сделать страницы. Типа плагина для создания страниц. Плагин получился но не получается добавить вторую tpl страцу к нему и ссылку к ней соотвественно. 

Виктор
#2 29. Dezember 2018, 11:32
#43933 vpktz:

Хочу создать пару страниц, для контактов и пользовательских соглашений например. В общем отдельные. 

Пытался через модуль page но там почему что половина html тегов не срабатывает, не сограняется. И не получается сделать красивую страницу.

Просто так tpl страницу в котонти не сделаешь, и я решил сделать дефолтный плагин как указано  тут https://cotonti.cmsworks.ru/index.php?e=page&c=tutorials&al=hello   и на его базе сделать страницы. Типа плагина для создания страниц. Плагин получился но не получается добавить вторую tpl страцу к нему и ссылку к ней соотвественно. 

Попробуйте в модуе page в категории system создать эти страницы и для каждой свой шаблон

https://cotonti.cmsworks.ru/index.php?e=forums&m=posts&p=1075&highlight=%25D0%25A1%25D0%25A2%25D0%2590%25D0%25A2%25D0%2598%25D0%25A7%25D0%2595%25D0%25A1%25D0%259A%25D0%2598%25D0%2595%2B%25D0%25A1%25D0%25A2%25D0%25A0%25D0%2590%25D0%259D%25D0%2598%25D0%25A6%25D0%25AB#1075

пользовательских соглашений - плагин useragreement

 


Dieser Beitrag wurde von Виктор (am 29. Dezember 2018, 11:46, vor 5 Jahre) bearbeitet
vpktz
#3 29. Dezember 2018, 13:51

шаблон вывода любой страницы page.tpl , созданый в модуле page выводятся через него. Вы имеете ввиду наделать их? Если да то как? Но  в обще хотелось бы все таки реализовать через плагин пустой, как я изначально хотел . Было бы удобно, добавил tpl, прописал его в page.php  и готово. Вот только как? У меня не получается.

Виктор
#4 31. Dezember 2018, 08:11
#43935 vpktz:

шаблон вывода любой страницы page.tpl , созданый в модуле page выводятся через него. Вы имеете ввиду наделать их? Если да то как? Но  в обще хотелось бы все таки реализовать через плагин пустой, как я изначально хотел . Было бы удобно, добавил tpl, прописал его в page.php  и готово. Вот только как? У меня не получается.

Посмотрел внимательнее, для статических страниц (к примеру О сайте, Наши контакты), категория system, шаблон page.system.tpl, но он для всех страниц в категории system

Roffun
#5 31. Dezember 2018, 10:32
#43935 vpktz:

шаблон вывода любой страницы page.tpl , созданый в модуле page выводятся через него. Вы имеете ввиду наделать их? Если да то как? 

Всё зависит от цели, для которой это делается. Например, если хотите просто выводить содержимое tpl файла, и при этом внутри него не будет блоков, то достаточно конструкции FILE.

Если нужно сделать просто другое оформление категории, то в админке можно указать другой шаблон вывода, например custom, тогда для этой категории будет применяться другой tpl при наличии (его нужно создать) или тот что по умолчанию в случае отсутствия. Таким образом уже будет минимум 3 шаблона вывода:

  • page.tpl
  • page.custom.tpl
  • page.system.tpl

Если же цель - именно создание своего плагина, с отдельной страницей, то в примере по ссылке указано как создать standalone, а это одна страница, ничего общего не имеющая с page, поэтому теги там и не работают.

Если хотите в своем плагине создавать вручную страницы tpl, которые будут работать внутри page, и выводить их внутри page.tpl, то это реализуется иначе. После праздников напишу пример создания такого плагина.

Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
Dayver
#6 31. Dezember 2018, 18:16

Да, если задача просто размещение статичных html и для этого не нужен функционал шаблонизатора то можно использовать модуль а потом просто кинуть в папку datas/html/ ваши .html файлы и открывать сможете по адресу ваш.сайт\index.php?e=view&v=имяфайлабезрасширения

Pavlo Tkachenko aka Dayver
vpktz
#7 2. Januar 2019, 10:59

 

Если хотите в своем плагине создавать вручную страницы tpl, которые будут работать внутри page, и выводить их внутри page.tpl, то это реализуется иначе. После праздников напишу пример создания такого плагина.

Буду презнателен. Потому что именно это поможет в понимании работы как и в php так и системе cotonti. И возможно я когда нибудь начну писать

плагины. 

Потому что очень хочу. 

Добавлено 2 дня спустя:

#43938 Dayver:

Да, если задача просто размещение статичных html и для этого не нужен функционал шаблонизатора то можно использовать модуль а потом просто кинуть в папку datas/html/ ваши .html файлы и открывать сможете по адресу ваш.сайт\index.php?e=view&v=имяфайлабезрасширения

Спасибо, ваш способ работает. 

Только одна проблема. любой html документ я создаю уже изначально имеет вид 

<div class="col first">
	<div class="block">
		<h2 class="plugin">Array</h2>


	</div>
</div>

И вся верстка уже изначально получается внутри них. А так как у меня весь контент на всем сайте всегда в теге 

<div id="content" data-uk-height-viewport="expand: true">

</div>

То у меня получается криво . 

Я так понимаю надо сам модуль поправить и делается это в единственном файле view.php который выглядит вот так:

<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=module
[END_COT_EXT]
==================== */

/**
 * View module main
 *
 * @package view
 * @version 0.9.1
 * @author Cotonti Team
 * @copyright Copyright (c) Cotonti Team 2008-2012
 * @license BSD
 */

defined('COT_CODE') or die('Wrong URL.');

// Environment setup
define('COT_VIEW', true);
$env['location'] = 'views';

$v = cot_import('v', 'G', 'TXT');

if (mb_strpos($v, '.') !== false || mb_strpos($v, '/') !== false)
{
	die('Wrong URL.');
}

$incl_html = "datas/html/" . $v . ".html";
$incl_htm = "datas/html/" . $v . ".htm";
$incl_txt = "datas/html/" . $v . ".txt";

if (file_exists($incl_txt))
{
	$fd = @fopen($incl_txt, 'r') or die("Couldn't find a file : " . $incl_txt); // TODO: Need translate
	$vd = fread($fd, filesize($incl_txt));
	fclose($fd);
}
elseif (file_exists($incl_htm))
{
	$fd = @fopen($incl_htm, 'r') or die("Couldn't find a file : " . $incl_htm); // TODO: Need translate
	$vd = fread($fd, filesize($incl_htm));
	fclose($fd);
}
elseif (file_exists($incl_html))
{
	$fd = @fopen($incl_html, 'r') or die("Couldn't find a file : " . $incl_html); // TODO: Need translate
	$vd = fread($fd, filesize($incl_html));
	fclose($fd);
}
else
{
	cot_die();
}

if (preg_match('@<head>(.*?)</head>@si', $vd, $ext_head) == 1)
{
	$ext_head = $ext_head[1];
}
else
{
	$ext_head = '';
}

if (preg_match('@<body[^>]*?>(.*?)</body>@si', $vd, $ext_body) == 1)
{
	$ext_body = $ext_body[1];
}
else
{
	$ext_body = $vd;
}

$vt = '&nbsp;';

if (mb_stripos($ext_head, '<meta name="cot_title"') !== false)
{
	$vt = mb_stristr($ext_head, '<meta name="cot_title"');
	$vt = mb_stristr($vt, 'content="');
	$vt = mb_substr($vt, 9);
	$tag_title_end = mb_strpos($vt, '">');
	$vt = mb_substr($vt, 0, $tag_title_end);
}
elseif (preg_match('@<title>(.*?)</title>@si', $ext_head, $vt) == 1)
{
	$vt = $vt[1];
}

if (preg_match_all('@<script[^>]*?>(.*?)</script>@si', $ext_head, $ext_js) > 0)
{
	foreach ($ext_js[1] as $js)
	{
		$js = preg_replace(array('@<!--(.*?)\n@si', '@\/\/(.*?)-->\n@si'), array('', ''), $js);
		$morejavascript .= $js;
	}
}

if (preg_match_all('@<link[^>](.*?)>@si', $ext_head, $ext_links) > 0)
{
	foreach ($ext_links[0] as $link)
	{
		$moremetas .= $link;
	}
}

require_once $cfg['system_dir'] . '/header.php';
$t = new XTemplate(cot_tplfile('plugin'));

$t->assign(array(
	'PLUGIN_TITLE' => $vt,
	'PLUGIN_BODY' => $ext_body
));

$t->parse('MAIN');
$t->out('MAIN');

require_once $cfg['system_dir'] . '/footer.php';
?>

то я сам не осилил найти место где можно править изначальные теги потому как в php знаю процентов на 10. ТОлько самое основное.

Подскажите где тут надо исправить что бы не было изначальных html тегов в документе. Ну или был но мой.

<div id="content" data-uk-height-viewport="expand: true">

</div>

 


Dieser Beitrag wurde von vpktz (am 4. Januar 2019, 15:41, vor 5 Jahre) bearbeitet
Виктор
#8 4. Januar 2019, 18:04

 это наверное файл plugin.tpl в корне шаблона

<!-- BEGIN: MAIN -->

<div class="col first">
	<div class="block">
		<h2 class="plugin">{PLUGIN_TITLE}</h2>
		{PLUGIN_BODY}
	</div>
</div>

<!-- END: MAIN -->
$t = new XTemplate(cot_tplfile('plugin'));

 

 

Додано 2 хвилини потому:

Можете прописать в модуле вместо $t = new XTemplate(cot_tplfile(plugin)); -> $t = new XTemplate(cot_tplfile(myplugin)); и соответственно в корне шаблона файл myplugin.tpl c тегами думаю разберетесь

Kopusha
#9 4. Januar 2019, 20:41

Потом как все будет поделитесь готовым решением - интересно помотреть. Если именно плагином сделаете.

vpktz
#10 9. Januar 2019, 14:08
#43948 Виктор:

 это наверное файл plugin.tpl в корне шаблона

<!-- BEGIN: MAIN -->

<div class="col first">
	<div class="block">
		<h2 class="plugin">{PLUGIN_TITLE}</h2>
		{PLUGIN_BODY}
	</div>
</div>

<!-- END: MAIN -->
$t = new XTemplate(cot_tplfile('plugin'));

 

 

Додано 2 хвилини потому:

Можете прописать в модуле вместо $t = new XTemplate(cot_tplfile(plugin)); -> $t = new XTemplate(cot_tplfile(myplugin)); и соответственно в корне шаблона файл myplugin.tpl c тегами думаю разберетесь

Все верно проблема в "файл plugin.tpl в корне шаблона" . Спасибо.

Добавлено 5 минут спустя:

#43950 Kopusha:

Потом как все будет поделитесь готовым решением - интересно помотреть. Если именно плагином сделаете.

Впринципе это и есть решение на базе модуля. 

если задача просто размещение статичных html и для этого не нужен функционал шаблонизатора то можно использовать модуль а потом просто кинуть в папку datas/html/ ваши .html файлы и открывать сможете по адресу ваш.сайт\index.php?e=view&v=имяфайлабезрасширения

 А для решения проблемы с тегами редактировать свой  plugin.tpl  в сайт/themes/тема/plugin.tpl

 файл plugin.tpl в корне шаблона

<!-- BEGIN: MAIN -->
 
<div class="col first">
    <div class="block">
        <h2 class="plugin">{PLUGIN_TITLE}</h2>
        {PLUGIN_BODY}
    </div>
</div>
 
<!-- END: MAIN -->

Dieser Beitrag wurde von vpktz (am 9. Januar 2019, 14:13, vor 5 Jahre) bearbeitet