Плагин Custom link для MaxSite

или Делаем внутреннюю ссылку на пост – 2

В предыдущей публикации я поделился решением, как внутри контента записи генерировать ссылку на запись. Однако, будучи несложным в части кода, оно требовало правки 5 type-файлов. Естественно, я тут же заявил о себе на форуме MaxSite и получил от Максима конструктивные замечания, но самое главное — заветное слово, как реализовать плагин. Один хук, о котором я не знал, из-за чего первый вариант плагина не заработал.

Все оказалось [внешне] настолько просто, что я глазам не поверил.

Дальше просто цитирую readme.txt из поставки плагина:

Допустим, в вашей записи есть картинка, <img src="" … /> и вы хотите, чтобы на главной, на страницах рубрик и меток эта картинка стала ссылкой на запись.

Или наоборот, вы бы хотели анонс галереи изображений сопроводить иллюстрацией, но на странице галереи «лишней» картинки быть не должно.

Оберните элемент псевдотегами [link]…[/link] или [link-gal]…[/link-gal].

В результате

  • на страницах типов home, category и tag картинка будет выведена как ссылка.
  • конструкция [link]<img src=""… />[/link] на странице типа page выведет только сам тег <img src=""… /> без ссылки.
  • конструкция [link-gal]<img src=""… />[/link-gal] на странице типа page не выведет ничего.

Так же можно обернуть любой внутристрочный элемент или просто текст.

Конец цитаты.

Код (для ознакомления):


<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

/**
 * MaxSite CMS
 * (c) http://max-3000.com/
 */

// функция автоподключения плагина
function custom_link_autoload($args = array())
{
	mso_hook_add( 'content_content', 'custom_link');
	mso_hook_add( 'content', 'custom_link_remove'); // хук на вывод контента
}

// функция добавения ссылки
function custom_link($link='')
{
	global $page; // pr($page);
	
	if (!is_type('home') and !is_type('category') and !is_type('tag'))
	
		return $link;

	if ((strpos($page['page_content'], '[link]') === false) and (strpos($page['page_content'], '[link-gal]') === false))

		$link = $page['page_content'];

	else
	{
		if (is_type('home') or is_type('category') or is_type('tag'))
		{
			$url = getinfo('site_url') . 'page/' . $page['page_slug']; // pr($url);
			$pt[0] = '~\[(link|link-gal)\]~si';
			$pt[1] = '~\[/(link|link-gal)\]~si';
			$re[0] = '<a class="custom-link" href="' . $url . '" title="' . $page['page_title'] . '">';
			$re[1] = '</a>';
			$link = preg_replace($pt, $re, $page['page_content']);
		}
	}
	return $link;
}

// функция удаления псевдотегов
function custom_link_remove($text='')
{
	if (!is_type('page') and !is_type('search'))

		return $text;

	else
	{
		if (is_type('page'))
		{
			$pt[0] = '~\[link\]~si';
			$pt[1] = '~\[/link\]~si';
			$pt[2] = '~\[link-gal\](.*?)\[/link-gal\]~si';
		}
		if (is_type('search'))
		{
			$pt[0] = '~\[(link|link-gal)\]~si';
			$pt[1] = '~\[/(link|link-gal)\]~si';
		}
		$text = preg_replace($pt, '', $text);
	}
	return $text;
}

?>

В заключение скажу, что вернул к исходному виду все 5 измененных type-файлов и подключил плагин.

Скачать плагин Custom link

Loading comments …   ←   Плагин Custom link для MaxSite

Fields marked with asterix are required.


Max 40 alpha-numeric characters, including spaces.


Valid email. Max 255 characters. Not displayed publicly.

*