<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.forkbrowser.top/w/index.php?action=history&amp;feed=atom&amp;title=FXMLbaseparser</id>
	<title>FXMLbaseparser - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.forkbrowser.top/w/index.php?action=history&amp;feed=atom&amp;title=FXMLbaseparser"/>
	<link rel="alternate" type="text/html" href="https://wiki.forkbrowser.top/w/index.php?title=FXMLbaseparser&amp;action=history"/>
	<updated>2026-04-16T11:27:08Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.forkbrowser.top/w/index.php?title=FXMLbaseparser&amp;diff=1917&amp;oldid=prev</id>
		<title>Mentos: Новая страница: «==PHP класс упрощающий верстку кода для Fork browser==  &lt;div class=&quot;toccolours mw-collapsible mw-collapsed&quot; style=&quot;width:700px; overf…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.forkbrowser.top/w/index.php?title=FXMLbaseparser&amp;diff=1917&amp;oldid=prev"/>
		<updated>2024-10-15T00:21:19Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «==PHP класс упрощающий верстку кода для Fork browser==  &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:700px; overf…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==PHP класс упрощающий верстку кода для Fork browser==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:700px; overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;Смотреть fxmlbaseparser.php с тестовым использованием кода сторонней страницы для парсинга&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Можно сохранить в отдельном файле fxmlbaseparser.php и использовать во всех проектах через include &amp;quot;fxmlbaseparser.php&amp;quot;;&lt;br /&gt;
header(&amp;#039;Access-Control-Allow-Origin: *&amp;#039;);&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Methods: POST, GET, OPTIONS&amp;quot;);&lt;br /&gt;
header(&amp;quot;Access-Control-Allow-Headers: Accept, Content-Type&amp;quot;);&lt;br /&gt;
if($_SERVER[&amp;#039;REQUEST_METHOD&amp;#039;]==&amp;#039;OPTIONS&amp;#039;) exit;&lt;br /&gt;
class fxmlBaseParser{&lt;br /&gt;
	public $actual_page;&lt;br /&gt;
	public $_PL = [];&lt;br /&gt;
	public function getScheme(){&lt;br /&gt;
		$scheme = $_SERVER[&amp;#039;REQUEST_SCHEME&amp;#039;] ?? &amp;#039;http&amp;#039;;&lt;br /&gt;
		if (isset($_SERVER[&amp;#039;HTTP_X_FORWARDED_PROTO&amp;#039;])) {&lt;br /&gt;
			$scheme = $_SERVER[&amp;#039;HTTP_X_FORWARDED_PROTO&amp;#039;];&lt;br /&gt;
		} elseif (isset($_SERVER[&amp;#039;HTTPS&amp;#039;]) &amp;amp;&amp;amp; $_SERVER[&amp;#039;HTTPS&amp;#039;] == &amp;#039;on&amp;#039;) {&lt;br /&gt;
			$scheme = &amp;#039;https&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		return $scheme;&lt;br /&gt;
	}&lt;br /&gt;
	public function __construct(){		&lt;br /&gt;
		$requesturl = $this-&amp;gt;getScheme().&amp;quot;://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;actual_page = preg_replace(&amp;quot;/([\?&amp;amp;](w_lang|box_client|get_callback)=.*)/&amp;quot;, &amp;quot;&amp;quot;, $requesturl);&lt;br /&gt;
&lt;br /&gt;
		$this-&amp;gt;BASE=$this-&amp;gt;getScheme().&amp;quot;://$_SERVER[HTTP_HOST]&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	public function sU($u,$d=&amp;quot;&amp;quot;){&lt;br /&gt;
		if (!$u) return $d;&lt;br /&gt;
		if (!$d) return $u;	&lt;br /&gt;
		// Разделяем URL и данные POST-запроса&lt;br /&gt;
		$ur = explode(&amp;quot;#POST&amp;quot;, $u);&lt;br /&gt;
		$dr = explode(&amp;quot;#POST&amp;quot;, $d);	&lt;br /&gt;
		// Если URL начинается с &amp;#039;curl&amp;#039;, возвращаем его&lt;br /&gt;
		if (strpos($u, &amp;quot;curl&amp;quot;) === 0) return $u;	&lt;br /&gt;
		// Добавляем &amp;quot;?&amp;quot; или &amp;quot;&amp;amp;&amp;quot; для параметров&lt;br /&gt;
		$ur[0] .= (strpos($ur[0], &amp;quot;?&amp;quot;) === false) ? &amp;quot;?&amp;quot; : &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
		$ur[0] .= $dr[0];	&lt;br /&gt;
		// Обрабатываем данные POST-запроса&lt;br /&gt;
		if (!empty($ur[1]) || !empty($dr[1])) {&lt;br /&gt;
			$ur[0] .= &amp;quot;#POST&amp;quot; . ($ur[1] ?? &amp;#039;&amp;#039;) . (($ur[1] &amp;amp;&amp;amp; $dr[1]) ? &amp;quot;&amp;amp;&amp;quot; : &amp;quot;&amp;quot;) . ($dr[1] ?? &amp;#039;&amp;#039;);&lt;br /&gt;
		}	&lt;br /&gt;
		return $ur[0];&lt;br /&gt;
	}&lt;br /&gt;
	public function getParse($url,$crs=&amp;quot;android|direct|rf&amp;quot;,$id=0){&lt;br /&gt;
		$xdata=&amp;quot;s$id&amp;quot;;&lt;br /&gt;
		if(isset($_POST[$xdata])|| ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;]==&amp;quot;POST&amp;quot;&amp;amp;&amp;amp;isset($_GET[&amp;quot;get_url&amp;quot;]))){&lt;br /&gt;
			return $_POST[$xdata];&lt;br /&gt;
		}&lt;br /&gt;
		else{&lt;br /&gt;
			$post=$this-&amp;gt;sU($this-&amp;gt;actual_page,&amp;quot;get_url=&amp;quot;.urlencode($url).&amp;quot;#POST$xdata=%s&amp;quot;);&lt;br /&gt;
			$prs=[&amp;quot;parse&amp;quot;=&amp;gt;&amp;quot;$url&amp;quot;,&amp;quot;cors&amp;quot;=&amp;gt;$crs,&amp;quot;fastremote&amp;quot;=&amp;gt;false,&amp;quot;async&amp;quot;=&amp;gt;[&amp;quot;post&amp;quot;=&amp;gt;$post]];&lt;br /&gt;
			print json_encode($prs);&lt;br /&gt;
			exit;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	public function add($ch) {&lt;br /&gt;
		if ($ch === null) return;	&lt;br /&gt;
		// Установка флага с переносом строки&lt;br /&gt;
		if (isset($ch[&amp;quot;br&amp;quot;])) $this-&amp;gt;withbr = true;	&lt;br /&gt;
		// Объединение значений с addbefore и noaddbr, если они установлены&lt;br /&gt;
		if ($this-&amp;gt;addbefore !== null) {&lt;br /&gt;
			$ch[&amp;quot;before&amp;quot;] = $this-&amp;gt;addbefore . $ch[&amp;quot;before&amp;quot;];&lt;br /&gt;
			$this-&amp;gt;addbefore = null;&lt;br /&gt;
		}	&lt;br /&gt;
		if ($this-&amp;gt;noaddbr !== null) {&lt;br /&gt;
			$ch[&amp;quot;noaddbr&amp;quot;] = $this-&amp;gt;noaddbr;&lt;br /&gt;
			$this-&amp;gt;noaddbr = null;&lt;br /&gt;
		}	&lt;br /&gt;
		// Замена ключей&lt;br /&gt;
		foreach ([&amp;quot;url&amp;quot; =&amp;gt; &amp;quot;playlist_url&amp;quot;, &amp;quot;stream&amp;quot; =&amp;gt; &amp;quot;stream_url&amp;quot;, &amp;quot;icon&amp;quot; =&amp;gt; &amp;quot;logo_30x30&amp;quot;] as $old =&amp;gt; $new) {&lt;br /&gt;
			if (isset($ch[$old])) {&lt;br /&gt;
				$ch[$new] = $ch[$old];&lt;br /&gt;
				unset($ch[$old]);&lt;br /&gt;
			}&lt;br /&gt;
		}	&lt;br /&gt;
		// Установка логотипа по умолчанию&lt;br /&gt;
		if (!isset($ch[&amp;quot;logo_30x30&amp;quot;])) $ch[&amp;quot;logo_30x30&amp;quot;] = &amp;quot;none&amp;quot;;	&lt;br /&gt;
		// Добавление BASE к относительным путям&lt;br /&gt;
		$this-&amp;gt;addBaseToPaths($ch, [&amp;quot;url&amp;quot;, &amp;quot;playlist_url&amp;quot;, &amp;quot;stream&amp;quot;, &amp;quot;stream_url&amp;quot;, &amp;quot;parser&amp;quot;, &amp;quot;presearch&amp;quot;], $this-&amp;gt;BASE);	&lt;br /&gt;
		// Обработка меню и подменю&lt;br /&gt;
		if (isset($ch[&amp;quot;menu&amp;quot;])) $this-&amp;gt;addBaseToPaths($ch[&amp;quot;menu&amp;quot;], [&amp;quot;playlist_url&amp;quot;], $this-&amp;gt;BASE);&lt;br /&gt;
		if (isset($ch[&amp;quot;submenu&amp;quot;])) $this-&amp;gt;addBaseToPaths($ch[&amp;quot;submenu&amp;quot;], [&amp;quot;logo_30x30&amp;quot; =&amp;gt; $this-&amp;gt;BASEICON, &amp;quot;playlist_url&amp;quot;, &amp;quot;stream_url&amp;quot;, &amp;quot;parser&amp;quot;], $this-&amp;gt;BASE);	&lt;br /&gt;
		// Обработка подтверждений&lt;br /&gt;
		if (isset($ch[&amp;quot;confirm&amp;quot;])) $this-&amp;gt;addBaseToPaths($ch[&amp;quot;confirm&amp;quot;], [], $this-&amp;gt;BASE);	&lt;br /&gt;
		// Добавление иконок&lt;br /&gt;
		$this-&amp;gt;addBaseToPaths($ch, [&amp;quot;logo_30x30&amp;quot;], $this-&amp;gt;BASEICON);	&lt;br /&gt;
		// Добавляем канал в список&lt;br /&gt;
		$this-&amp;gt;_PL[&amp;quot;channels&amp;quot;][] = $ch;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private function addBaseToPaths(&amp;amp;$array, $fields, $base) {&lt;br /&gt;
		foreach ($fields as $field =&amp;gt; $customBase) {&lt;br /&gt;
			$baseToUse = is_string($field) ? $customBase : $base;&lt;br /&gt;
			$key = is_string($field) ? $field : $customBase;&lt;br /&gt;
			if (isset($array[$key]) &amp;amp;&amp;amp; strpos($array[$key], &amp;quot;/&amp;quot;) === 0) {&lt;br /&gt;
				$array[$key] = $baseToUse . $array[$key];&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	public function render() {&lt;br /&gt;
		// Добавляем BASE к относительным путям иконки&lt;br /&gt;
		$this-&amp;gt;addBaseToPaths($this-&amp;gt;_PL, [&amp;quot;icon&amp;quot;], $this-&amp;gt;BASE);	&lt;br /&gt;
		// Добавляем BASE к относительным путям в меню&lt;br /&gt;
		if (is_array($this-&amp;gt;_PL[&amp;quot;menu&amp;quot;])) {&lt;br /&gt;
			foreach ($this-&amp;gt;_PL[&amp;quot;menu&amp;quot;] as $kk =&amp;gt; $vv) {&lt;br /&gt;
				$this-&amp;gt;addBaseToPaths($this-&amp;gt;_PL[&amp;quot;menu&amp;quot;][$kk], [&amp;quot;url&amp;quot;, &amp;quot;playlist_url&amp;quot;, &amp;quot;stream&amp;quot;, &amp;quot;stream_url&amp;quot;, &amp;quot;parser&amp;quot;], $this-&amp;gt;BASE);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		// Добавление сообщения об FXML и вывод JSON&lt;br /&gt;
		$this-&amp;gt;_PL = array_merge([&amp;quot;fxml&amp;quot; =&amp;gt; &amp;quot;This page contains FXML code from PHP generator  fxmlBaseParser class! Open it in the Fork browser or any other browser that supports FXML code.&amp;quot;], $this-&amp;gt;_PL);&lt;br /&gt;
		echo json_encode($this-&amp;gt;_PL);&lt;br /&gt;
		return $this;&lt;br /&gt;
	}	&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
$FXML=new fxmlBaseParser();&lt;br /&gt;
&lt;br /&gt;
// Удалите этот блок, если не нужен тест. Он добавляет кнопку &amp;quot;Test&amp;quot; в плейлист и выводит результат парсинга в виде HTML-кода при нажатии на кнопку.&lt;br /&gt;
if(@$_GET[&amp;quot;mode&amp;quot;]==&amp;quot;test&amp;quot;){&lt;br /&gt;
	$link=&amp;quot;https://api.ninsel.ws/embed/movie/1212&amp;quot;;&lt;br /&gt;
	$html= $FXML-&amp;gt;getParse($link,&amp;quot;android|direct|rf&amp;quot;);&lt;br /&gt;
	$FXML-&amp;gt;add([&amp;quot;title&amp;quot;=&amp;gt;&amp;quot;Result parse&amp;quot;,&amp;quot;description&amp;quot;=&amp;gt;htmlspecialchars($html)]);&lt;br /&gt;
}&lt;br /&gt;
else $FXML-&amp;gt;add([&amp;quot;title&amp;quot;=&amp;gt;&amp;quot;Test&amp;quot;,&amp;quot;playlist_url&amp;quot;=&amp;gt;$FXML-&amp;gt;actual_page.&amp;quot;?mode=test&amp;quot;,&amp;quot;description&amp;quot;=&amp;gt;$FXML-&amp;gt;actual_page]);&lt;br /&gt;
&lt;br /&gt;
$FXML-&amp;gt;render();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Еще примеры использования fxmlbaseparser.php==&lt;br /&gt;
===Вывод списка категорий===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Подключаем библиотеку fxmlbaseparser.php&lt;br /&gt;
include &amp;#039;fxmlbaseparser.php&amp;#039;;&lt;br /&gt;
// Используем экземпляр класса fxmlBaseParser&lt;br /&gt;
// Можно задать свою базовую директорию если она неправильно определилась (без / в конце) $FXML-&amp;gt;BASE=&amp;quot;http://site.com/parsers&amp;quot;&lt;br /&gt;
$FXML-&amp;gt;add([&amp;quot;title&amp;quot;=&amp;gt;&amp;quot;Category 1&amp;quot;,&amp;quot;playlist_url&amp;quot;=&amp;gt;&amp;quot;/?category=1&amp;quot;];&lt;br /&gt;
$FXML-&amp;gt;add([&amp;quot;title&amp;quot;=&amp;gt;&amp;quot;Category 2&amp;quot;,&amp;quot;playlist_url&amp;quot;=&amp;gt;&amp;quot;/?category=2&amp;quot;];&lt;br /&gt;
$FXML-&amp;gt;render();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление меню===&lt;br /&gt;
&lt;br /&gt;
Пример кода для добавления меню&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Подключаем библиотеку fxmlbaseparser.php&lt;br /&gt;
include &amp;#039;fxmlbaseparser.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// Создаем экземпляр класса FXMLBaseParser&lt;br /&gt;
$FXML = new FXMLBaseParser();&lt;br /&gt;
&lt;br /&gt;
// Добавляем категории&lt;br /&gt;
$FXML-&amp;gt;add([&amp;quot;title&amp;quot; =&amp;gt; &amp;quot;Category 1&amp;quot;, &amp;quot;playlist_url&amp;quot; =&amp;gt; &amp;quot;/?category=1&amp;quot;]);&lt;br /&gt;
$FXML-&amp;gt;add([&amp;quot;title&amp;quot; =&amp;gt; &amp;quot;Category 2&amp;quot;, &amp;quot;playlist_url&amp;quot; =&amp;gt; &amp;quot;/?category=2&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
// Добавляем меню&lt;br /&gt;
$FXML-&amp;gt;_PL[&amp;quot;menu&amp;quot;][]=[&amp;quot;title&amp;quot; =&amp;gt; &amp;quot;Home&amp;quot;, &amp;quot;playlist_url&amp;quot; =&amp;gt; &amp;quot;/&amp;quot;];&lt;br /&gt;
$FXML-&amp;gt;_PL[&amp;quot;menu&amp;quot;][]=[&amp;quot;title&amp;quot; =&amp;gt; &amp;quot;About&amp;quot;, &amp;quot;playlist_url&amp;quot; =&amp;gt; &amp;quot;/?mode=about&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Генерируем и выводим FXML код&lt;br /&gt;
$FXML-&amp;gt;render();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mentos</name></author>
	</entry>
</feed>