fenom icon indicating copy to clipboard operation
fenom copied to clipboard

Не получается подключить аддон Assets

Open DomiTori-DLE opened this issue 8 years ago • 8 comments

Второй день борюсь с такой проблемой. Четкого мануала что куда вставлять и какие файлы дозаливать в среду fenom я не нашел. Мне необходимо подключить расширение Assets для возможности использования css и js в пределах среды. Вот ошибка которую мне выдает - http://musicplay.online/main/1-supernatural.html (тестовый сайт). Пробовал с readme по Assets воткнуть разный код в разные файлы и места. Ошибка не исчезает. Прошу гуру помочь

DomiTori-DLE avatar Nov 25 '16 16:11 DomiTori-DLE

А как всё это выглядит в коде?

pafnuty avatar Nov 25 '16 20:11 pafnuty

@DomiTori-DLE уточните откуда вы тяните Assets?

bzick avatar Nov 25 '16 21:11 bzick

<?php

// Класс с основными методами для работы модуля, все другие классы наследуются от него
class Abstractepisodes {

	public $output; // сгенирированный вывод
	public $dle_config; // конфигурация dle
	public $config; // конфигурация модуля
	public $dle_db; // объект бд
	public $is_logged; // авторизирован ли пользователь
	public $user_info; // информация о пользователе
	public $fenom; // Шаблонизатор
	public $parse; // dle парсер

	public function __construct($conf = array()) {
        global $db, $config, $is_logged, $member_id;
        $this->config = $conf; // конфигурация класса
        $this->dle_config = &$config; // конфигурационный файл dle
        $this->dle_db = &$db; // работа с базой данных
        $this->is_logged = &$is_logged; // залогинен ли пользователь
        $this->user_info = &$member_id; // информация о пользователе

        include ('engine/api/api.class.php');
        $this->dle_api = &$dle_api; // dle api

        // Шаблонизатор
		require(__DIR__ . "/fenom/Fenom.php");
		Fenom::registerAutoload();

		// Необходимые директории
		$episodesTplDir = ROOT_DIR.'/templates/'.$config['skin'].'/episodes'; // Директория шаблонов
		$episodesTplCacheDir = ROOT_DIR.'/templates/'.$config['skin'].'/episodes/cache'; // Директория шаблонов

		$fenomOptions = array(
			// Пересобираем шаблон при редактировании
			'auto_reload' => true,
			// Автоматическая проверка переменных
			'force_verify' => true,
			// удаляет лишние пробелы из шаблона
			'strip' => true
		);

		$this->fenom = Fenom::factory($episodesTplDir, $episodesTplCacheDir, $fenomOptions);

		include_once ENGINE_DIR . '/classes/parse.class.php';
        $this->parse = new ParseFilter( Array (), Array (), 1, 1 );
	}

	public function textLimit($data, $count)
	{
		if ($count == 0) 
		{	
			$data = strip_tags($data, '<br>');
			$data = trim(str_replace(array('<br>','<br />'), ' ', $data));

			if($count && dle_strlen($data, $this->dle_config['charset']) > $count)
			{
				$data = dle_substr($data, 0, $count, $this->dle_config['charset']). '&hellip;';					
				if(!$this->config['wordcut'] && ($word_pos = dle_strrpos($data, ' ', $this->dle_config['charset']))) 
					$data = dle_substr($data, 0, $word_pos, $this->dle_config['charset']). '&hellip;';

			}
		}
		return $data;
	}

	public function pageNavigation($page, $total, $url) {
		// Проверяем нужны ли стрелки назад  
		if ($page != 1) {
			$pervpage = '<a href="'.$url.'page/'. ($page - 1) .'"><svg class="icon icon-left"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-left"></use></svg></a>';
		} else {
			$pervpage = '<span><svg class="icon icon-left"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-left"></use></svg></span>';
		}
		// Проверяем нужны ли стрелки вперед  
		if ($page != $total) {
			$nextpage = '<a href="'.$url.'page/'. ($page + 1) .'"><svg class="icon icon-right"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-right"></use></svg></a>';
		} else {
			$nextpage = '<span><svg class="icon icon-right"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-right"></use></svg></span>';
		}

		// Находим две ближайшие станицы с обоих краев, если они есть  
		if($page - 2 > 0) $page2left = ' <a href="'.$url.'page/'. ($page - 2) .'">'. ($page - 2) .'</a>';  
		if($page - 1 > 0) $page1left = '<a href="'.$url.'page/'. ($page - 1) .'">'. ($page - 1) .'</a>';  
		if($page + 2 <= $total) $page2right = '<a href="'.$url.'page/'. ($page + 2) .'">'. ($page + 2) .'</a>';  
		if($page + 1 <= $total) $page1right = '<a href="'.$url.'page/'. ($page + 1) .'">'. ($page + 1) .'</a>'; 
		// Вывод меню  
		$return = $page2left.$page1left.'<span>'.$page.'</span>'.$page1right.$page2right;
		
		// Ссылка на последнюю страницу
		if($page != $total && $total > 3 && (($page + 2) != $total) && (($page + 1) != $total)) {
			$return .= '...<a href="'.$url.'page/'. ($total) .'">'. ($total) .'</a>';
		}

		// Ссылка на первую страницу
		if($page > 3 && $total > 3) {
			$return = '<a href="'.$url.'">1</a>...'.$return;
		}
return <<<HTML
<div class="navigation ignore-select">
	<div class="page_next-prev">
		<span class="page_prev" title="Предыдущая страница">
			$pervpage
		</span>
		<span class="page_next" title="Следующая страница">
			$nextpage
		</span>
	</div>
	<div class="pages">
	$return
	</div>
</div>
HTML;
	}

	// Выводит результат
	public function showOutput() {
		echo $this->output;
	}

	// Страница 404
	public function notFound($title = '', $text = '') {
		global $lang;
		header("HTTP/1.0 404 Not Found");
		$title = !empty($title) ? $title : $lang['all_err_1'];
		$text = !empty($text) ? $text : $lang['news_err_12'];
		$this->output = $this->message($title, $text);
		$this->showOutput();
	}

	// Сообщение
	public function message($title = '', $text = '') {
		return $this->fenom->fetch('info.tpl', ['title' => $title, 'error' => $text]);
	}

	/**
	 * @param $post - массив с информацией о статье
	 * @return string URL для категории
	 */
	public function getPostUrl($post_id, $post_alt_name, $post_category, $postDate) {		
	if($this->dle_config['allow_alt_url'] && $this->dle_config['allow_alt_url'] != 'no')
		{
			if(
				($this->dle_config['version_id'] < 9.6 && $this->dle_config['seo_type'])
					||
				($this->dle_config['version_id'] >= 9.6 && ($this->dle_config['seo_type'] == 1 || $this->dle_config['seo_type'] == 2))
			)
			{
				if(intval($post_category) && $this->dle_config['seo_type'] == 2)
				{
					$url = $this->dle_config['http_home_url'].get_url(intval($post_category)).'/'.$post_id.'-'.$post_alt_name.'.html';
				}
				else
				{
					$url = $this->dle_config['http_home_url'].$post_id.'-'.$post_alt_name.'.html';
				}
			}
			else
			{
				$url = $this->dle_config['http_home_url'].date('Y/m/d/', $postDate).$post_alt_name.'.html';
			}
		}
		else
		{
			$url = $this->dle_config['http_home_url'].'index.php?newsid='.$post_id;
		}

		return $url;
	}

	// Проверяет, существует ли новость в базе данных
	public function issetPost($post_id) {
		$db_posts = PREFIX.'_post';
		$post_id = (int) $post_id;
		$query = "SELECT id FROM {$db_posts} WHERE id = {$post_id}";
		$result = $this->dle_db->super_query($query);
		if(!empty($result['id'])){
			return true;
		} else{
			return false;
		}
	}

	public function getPost($post_id) {
		$db_posts = PREFIX.'_post';
		$post_id = (int) $post_id;
$query = <<<HTML
SELECT
	id post_id,
	category post_category,
	autor post_autor,
	date post_date,
	short_story post_short_story,
	full_story post_full_story,
	title post_title,
	alt_name post_alt_name
FROM {$db_posts} 
WHERE id = {$post_id}
HTML;
		$result = $this->dle_db->super_query($query);
		if(!$result){
			return false;
		} else{
			$result['post_url'] = $this->getPostUrl(
					$result['post_id'], 
					$result['post_alt_name'],
					$result['post_category'],
					$result['post_date']
				);
			return $result;
		}
	}
	// Выводит отформатированный массив
	public function print_r($array = array()) {
        echo '<pre>';
        print_r($array);
        echo '</pre>';
    }

    // Отправлено ли методом POST
	public function methodPost(){
		if($_SERVER['REQUEST_METHOD'] === 'POST') {
			return true;
		}
		return false;
	}
}

В этом файле подключаю Fenom, дальше использую его в модуле для cms DLE. Это содержимое залил в .../Fenom/

DomiTori-DLE avatar Nov 26 '16 01:11 DomiTori-DLE

@pafnuty @bzick пробовал подключить как в этот файл так и в Fenom.php, ошибка о неизвесном теге css не пропадает

DomiTori-DLE avatar Nov 27 '16 03:11 DomiTori-DLE

@DomiTori-DLE а где формируется тег, на котором происходит ошибка?

pafnuty avatar Nov 27 '16 10:11 pafnuty

@pafnuty Вот файл в котором пытаюсь подключить, файл в формате .tpl и лежит в шаблоне движка episode_list.tpl.txt

DomiTori-DLE avatar Nov 27 '16 14:11 DomiTori-DLE

@DomiTori-DLE ещё раз. Где формируется тег (не выводится, а именно формируется)? так же попробуйте отвязаться от CMS и воспроизвести ошибку вне CMS т.к. она накладывает свои ошибки поверх ваших.

pafnuty avatar Nov 27 '16 15:11 pafnuty

Все аддоны являются примесями - trait class. Соответственно, что бы fenom получил возможности от аддона нужно расширить класс фенома примесью.

bzick avatar Nov 29 '16 11:11 bzick