Форумы / National / Russian / Модули и плагины / Page Text by ID + i18n

Нужна помощь

Дмитрий
#1 15.01.2017 10:40

Ребят, никто ещё не модернизировал плагины PageText by ID или GetPageText на предмет поддержки i18n? Или может кто подскажет, как это сделать. Я как понимаю, это не сложно, но сам не обладаю азами програмирования на PHP. Посему прошу помощи в этом вопросе.

 

Kort
#2 17.01.2017 22:03

Вряд ли кто-то эти плагины будет модернизировать. Pagelist попробуйте, там есть поддержка i18n

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Дмитрий
#3 18.01.2017 19:52

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

А Pagelist у меня в проекте уже используется с интернационализацией и вполне успешно. Но для этой конкретной цели, он не очень подходит. Мне нужно дергать текст из 2х страниц в 2 отдельных блока на главной странице, а Pagelist работает с категориями, а не с id страницы.

Добавлено 14 часов спустя:

В общем получилось вот так. Плагин PageText by ID теперь работает с i18n. Код писал не я, так что на его идеальность не предендую)

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

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

require_once cot_incfile('page', 'module');

/**
 * Returns parsed page_text for a given page
 * @param int|string $pid Page ID or Alias
 * @return string
 */
function pagetextbyid($pid)
{
	global $db, $db_pages, $cfg, $last_pagetext;
	$last_pagetext = array();
	$last_pagetext['pid'] = $pid;
	
	if (is_numeric($pid)) {
		$last_pagetext['id'] = $id;
		$where_condition = 'p.page_id = '.((int)$pid);
	} else {
		$last_pagetext['alias'] = $pid;
		$where_condition = 'p.page_alias = "'.$db->quote($pid).'"';
	}
	
	// Add i18n features if installed
	if (cot_plugin_active('i18n'))
	{
		global $db_i18n_pages, $i18n_locale;
		$join_columns .= ' , i18n.ipage_text, i18n.ipage_title ';
		$join_tables .= ' LEFT JOIN '.$db_i18n_pages.' AS i18n ON i18n.ipage_id=p.page_id AND i18n.ipage_locale="'.$i18n_locale.'" AND i18n.ipage_id IS NOT NULL ';
	}
	
	$res = $db->query("SELECT p.page_id, p.page_alias, p.page_title, p.page_text, p.page_parser $join_columns
		FROM $db_pages AS p
		$join_tables
		WHERE $where_condition");

	if ($res->rowCount() > 0)
	{
		$row = $res->fetch();
		$row['page_text'] = ($row['ipage_text'] ?: $row['page_text']);
		$row['page_title'] = ($row['ipage_title'] ?: $row['page_title']);
		$last_pagetext['text'] = cot_parse($row['page_text'], $cfg['page']['markup'], $row['page_parser']);
		$last_pagetext['id'] = $row['page_id'];
		$last_pagetext['alias'] = $row['page_alias'];
		$last_pagetext['title'] = $row['page_title'];
		return $last_pagetext['text'];
	}
	else
	{
		return '';
	}
}

?>

З.Ы. Если кто ещё подскажет как им дергать не только поле text, а ещё и title, буду благодарен.

Отредактировано: Дмитрий (19.01.2017 10:34, 7 лет назад)
Denisbox
#4 19.01.2017 11:09

Неправда ваша, pagelist очень даже может вывести отдельную страницу, правда не по ID а по алиас-у:

Вывод блока «О сайте» – страница с алиасом about из раздела system:

{PHP|pagelist('pagelist.about','','','page_alias = "about"','system')}

contact: fonts (at) otlab . ru
Дмитрий
#5 19.01.2017 18:00
#42590 Denisbox:

Неправда ваша, pagelist очень даже может вывести отдельную страницу, правда не по ID а по алиас-у:

И правда можно, что-то я упустил этот момент. Но в любом случае плагин PageText by ID уже модернизирован и для определенных моментов он более удобен, например когда нужно выдергнуть только текст, без использования шаблонов.

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

UPD: кстати, с ID Pagelist тоже работает, я проверил. В таком случае он действительно удобен и о старых плагинах можно забыть.

{PHP|pagelist('pagelist.block','','','page_id = "2"','pages')}

Отредактировано: Дмитрий (19.01.2017 23:04, 7 лет назад)