cotonti.com : [Решено] URL in Page module cloned https://www.cotonti.com Last topic posts Cotonti en Thu, 05 Feb 2026 16:27:24 -0000 Argont #47112 Alex300:

а файл .htaccess содержит это https://github.com/Cotonti/Cotonti/blob/master/sef-urls.htaccess? И содержимое этого поста тоже на месте https://www.cotonti.com/forums/47090?m=posts?

фига се ... laugh

неожиданно успешно пошло yes

четкий и уверенный лайк за подсказку cool

]]>
Tue, 26 Sep 2023 23:31:21 -0000
Alex300 а файл .htaccess содержит это https://github.com/Cotonti/Cotonti/blob/master/sef-urls.htaccess? И содержимое этого поста тоже на месте https://www.cotonti.com/forums/47090?m=posts?

]]>
Tue, 26 Sep 2023 07:45:07 -0000
Argont #47107 Alex300:

Не много поэксперементировал на выходных. Давайте добавим правила формирования URL'ов:

.....

Проверяем:
 

вечером обязательно отпишусь, что получилось )) днем будет некогда

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

только я не понял, что мне делать с пунктом номер 3.... куда это?))

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

нетерпелось, выполнил я пункты 1 и 2 - вовсе ничего не открывается, ни страница, ни категории frown  - 404

но всё равно спасибо ))

]]>
Tue, 26 Sep 2023 03:40:58 -0000
Alex300 Не много поэксперементировал на выходных. Давайте добавим правила формирования URL'ов:

1) Создайте файл datas/urltrans.dat следующего содержания:

video	c=*&al=*				{cot_url_catpath()}/{$al}
video	c=*&id=*				{cot_url_catpath()}/{$id}
video	c=*						{cot_url_catpath()}
video	m=*						video?m={$m}
video	*						video

page	m=*						page?m={$m}
page	c=system&al=*			{$al}{!$c}
page	c=all					page
page	c=*&al=*				{cot_url_catpath()}/{$al}
page	c=*&id=*				{cot_url_catpath()}/{$id}
page	c=*						{cot_url_catpath()}
index	*						{$_path}
plug	e=tags&a=pages&t=*		{$e}/{$t}{!$a}
plug	e=tags&a=*&t=*			{$e}/{$a}/{$t}
plug	e=*						{$e}
plug	*                       {$_path}
users	m=details&u=*			users/{cot_url_username()}
users	m=register				{$m}
users	m=profile				{$m}
users	m=passrecover			{$m}
login	*						{$_area}
message	*						{$_area}
admin	m=*						admin/{$m}
admin	*						{$_area}
rss		m=*&c=*					{$_area}/{$m}/{$c}
rss		m=*&id=*				{$_area}/{$m}/{$id}
rss		c=*						{$_area}/{$c}
rss		m=*						{$_area}/{$m}
*		c=*&al=*				{$_area}/{cot_url_catpath()}/{$al}
*		c=*&id=*				{$_area}/{cot_url_catpath()}/{$id}
*		c=*						{$_area}/{cot_url_catpath()}
*		al=*					{$_area}/{$al}
*		id=*					{$_area}/{$id}
*		*						{$_area}

Это тоже самое что и plugins/urleditor/presets/handy.dat я только добавил сверху правила для модуля Video.

2) В настройках плагина UrlEditor выбрать набор предустановок Собственный urltrans.dat.

3) Проверяем:
 

var_dump(
    cot_url('video'),   // "video"
    cot_url('video', ['c' =>'good-omens']), // "serials/good-omens"
    cot_url('video', ['c' =>'good-omens', 'al' => 'actors']), // "serials/good-omens/actors"
    cot_url('video', ['m' =>'edit', 'id' => '5']) // "video?m=edit&id=5"
);

 

]]>
Mon, 25 Sep 2023 06:00:21 -0000
Argont #47098 Alex300:

Чтобы их формировать надо добавить правила в настройках URLEditor либо в файл datas/urltrans.dat

то, что "нужно добавить правила", уверен это очевидно ))) как и то, что правила эти мне не известны - давно бы уже добавил и не морочил никому голову ))

]]>
Wed, 20 Sep 2023 12:59:39 -0000
Alex300

если комментировать тот, что ниже, - срабатывает лишь, если в ручную прописывать адрес в строке браузера
https://domain.tld/serials/
https://domain.tld/serials/documental/

Все верно. Тот код что написал выше только разбирает URL.

Чтобы их формировать надо добавить правила в настройках URLEditor либо в файл datas/urltrans.dat

]]>
Wed, 20 Sep 2023 12:18:58 -0000
Argont #47096 Alex300:

 https://domain.tld/serials/postalias/https://domain.tld/serials? При условии что категория в модуле Video с кодом serials и его страница с алиясом postalias существуют.

так и пробывал.

насчет закомментировать, сейчас попробую

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

если комментировать тот, что ниже, - срабатывает лишь, если в ручную прописывать адрес в строке браузера
https://domain.tld/serials/
https://domain.tld/serials/documental/

и потом, например по адресу https://domain.tld/serials/documental/
в категории есть некий пост
переходя на просмотр этого поста (страницы) получаем
https://domain.tld/video/serials/documental/some-alias

затем из этого поста, например вернуться по иерархии выше, используя бридкрамб/хлебные крошки
получаем уже не то, что было с самого начала, а такое
https://domain.tld/video/serials/
https://domain.tld/video/serials/documental/

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

тоже если с админки, при просмотре структуры модуля, подсвечивая ссылку на просмотр категории на фронтэнде, - сразу подятгивает код модуля "video" в ссылку

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

а хочется так чтоб как в модуле "page" ^)

]]>
Wed, 20 Sep 2023 11:26:20 -0000
Alex300

к сожалению не пошло...

А в чем ошибка?

Закомментируйте код внизу моего примера. который дет после комментария
// Тут можно сравнить cot_structure_parents($_GET['c')) и path и

Его можно отлаживать в последнюю очередь.

Что происходит при переходе по ссылкам вида https://domain.tld/serials/postalias/https://domain.tld/serials? При условии что категория в модуле Video с кодом serials и его страница с алиясом postalias существуют.

]]>
Wed, 20 Sep 2023 11:04:29 -0000
Argont #47094 Kort:

Да я не шучу: отдельный модуль даже при условии что решится вопрос с лишним УВ чем лучше в плане SEO?

ну вы удивляете... в чистом виде как клон - понятно ничем (из того, что сейчас там в аутпуте). а если затачивать под конкретные нужды то, что под капотом - так и останется? ))

]]>
Wed, 20 Sep 2023 09:41:16 -0000
Kort Да я не шучу: отдельный модуль даже при условии что решится вопрос с лишним УВ чем лучше в плане SEO?

]]>
Wed, 20 Sep 2023 09:09:45 -0000
Argont #47092 Kort:

Так надо было еще отладить) Посмотреть, почему не пошло.

Если вот прямо нужно отдельный модуль (хотя я упорно не понимаю, зачем),

PS: Можно я еще спрошу про преимущества в SEO если это будет отдельный модуль?

конечно можно.

думаю ответы вам и без того известны

]]>
Wed, 20 Sep 2023 09:02:29 -0000
Kort Так надо было еще отладить) Посмотреть, почему не пошло.

Если вот прямо нужно отдельный модуль (хотя я упорно не понимаю, зачем), видимо проще будет не клонировать page, а писать свой модуль с нуля. Тогда не нужно будет убивать уйму времени на распутывание всего функционала page, который перелезет в video. Заодно от копипаста перейдете на новый уровень.

В итоге варианты следующие:

  1. Клонировать page и дальше воевать с расцеплением функционала и лишним УВ
  2. Делать модуль с нуля на примере того же page
  3. Попробовать модифицировать локацию структуры, чтобы в ней был блок Video (без невидео-разделов), и чтобы в разделе Page не было видео-разделов -- если дело в этом
  4. Использовать модуль page

Пункты с 1 по 3 требуют хотя бы начального понимания того, как все работает. Иначе это тупиковые пути((

PS: Можно я еще спрошу про преимущества в SEO если это будет отдельный модуль?

]]>
Wed, 20 Sep 2023 08:27:40 -0000
Argont #47090 Alex300:

Ок. Задачу то мы полностью не знаем и предлагаем разные варианты решений.

Вернемся к изначальному вопросу ). Что такое хуки почитать можно тут.

. . . . .

P.S. код писался навскидку, в качестве примера и может потребоваться отладка

Спасибо, что уделили внимание. по хукам уже читал, давно они меня морочили ))).. я то понимаю, что это "крюк/захват" но именно в котонти никак не пойму принцип его работы, когда, где, после чего (событие/код) его вставлять.

за код навскидку, сейчас буду пробывать ))

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

к сожалению не пошло...

сделал точно по инструкции, - файл создал, код скопипастил, сохранился, обновил urleditor и свой модуль, кеш сбросил... всё по прежнему

]]>
Wed, 20 Sep 2023 07:49:59 -0000
Alex300 Ок. Задачу то мы полностью не знаем и предлагаем разные варианты решений.

Вернемся к изначальному вопросу ). Что такое хуки почитать можно тут. По сути это реализация событийной системы.

Нужно сделать обработчик события (хука). Для этого в корень расширения video добавте файл video.urleditor.rewrite.first.php следующего содержания:

<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=urleditor.rewrite.first
[END_COT_EXT]
==================== */

/**
 * @var string[] $path части пути в URL
 * @var int $count количество частей
 * @var string $rwr
 */

if (empty($path)) {
    return;
}

if (!in_array($path[0], ['serials', 'films', 'trailer'])) {
    // Это не наше расширение
    return;
}

$_GET['e'] = 'video';

// После выполнения этого обработчика продолжать разбирать URL не надо
$rwr_continue = false;

if ($count == 1) {
    // Это категория
    $_GET['c'] = $path[0];
} else {
    $last = $count - 1;
    if ((isset(\Cot::$structure['video'][$path[$last]]))) {
        // Это категория
        $_GET['c'] = $path[$last];
    } else {
        $_GET['c'] = $path[$last - 1];
        $_GET['al'] = $path[$last];
    }
}
// Тут можно сравнить cot_structure_parents($_GET['c')) и path и в случае несовпадения отдать 404
// Это нужно для того чтобы https://domain.tld/serials/good-omens/postalias/?bar=baz была доступна только по этому адресу, а не
// https://domain.tld/good-omens/postalias/?bar=baz и поисковики не индексировали дубли страниц
// Ну или можно так
if (!isset($_GET['m']) || !in_array($_GET['m'], ['add', 'edit'])) {
    $tmpUrl = cot_url(
        'video',
        ['c' => $_GET['c'], (!empty($_GET['al']) ? 'al' : 'id') => $path[$last]]
    );

    if ($rwr != $tmpUrl && $rwr != urldecode($tmpUrl)) {
        cot_url_usertheme_files();
        cot_die_message(404, true);
    }
}

 

Обновите свое расширение в панели администратора.

 

P.S. код писался навскидку, в качестве примера и может потребоваться отладка

]]>
Wed, 20 Sep 2023 05:44:01 -0000
Argont Господа, повторюсь, предмет обсуждения иной.

то, что свои шаблоны, уже опробывал, то что можно категории прикрутить отдельно тоже в курсе.

Мне нужно четко отвязаться, разделиться от модуля page, - потому что да, на перспективу, ожидается, что он будет не тронутым под капотом и свободно обновляться. мне нужно два совершенно независимых раздела, потому и уперся, в урл, точнее в припятсятвие указаное в топик старте. меня только это сейчас не пускает. а если получится, то уже новый модуль насколько ума хватит и времени на документацию - пилить и развивать, дорабатывать под себя. вот в чем вопрос. требуется два независимых раздела. не пилить же мне это на модуле форумов ...

]]>
Tue, 19 Sep 2023 13:40:54 -0000
Alex300 #47085 Kort:

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

Да и при этом еще можно для раздела видосиков создать свои шаблоны, для отображения на фронте. Они могут совсем отличаться от шаблонов других разделов.

]]>
Tue, 19 Sep 2023 12:16:53 -0000
Kort #47086 Argont:

если с далека я бы согласился.

но не то.

всем спасибо

Я не оспариваю и без иронии, но было бы любопытно узнать, почему не то и как надо чтобы было правильно.

]]>
Tue, 19 Sep 2023 12:06:54 -0000
Argont #47085 Kort:

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

если с далека я бы согласился.

но не то.

всем спасибо

]]>
Tue, 19 Sep 2023 11:33:33 -0000
Kort Если надо раздел статей и видосиков, создаешь в структуре страниц раздел видосиков, через экстраполя добавляешь ссылки или коды для видео, и все. И не надо ворочать модули для этого.

]]>
Tue, 19 Sep 2023 11:26:45 -0000
Argont #47083 Kort:

А зачем клонировать такой непростой модуль, как page? Может проще все можно решить?

дело в том, что как раз и нужен независимые разделы статей и видосиков

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

как минимум в силу дифферинциальности структур (категорий), в последствии плагинов под модуль и уже потом сео. может я чего-то не понимаю...

если реализовать не реально то что в топикстарте, прошу сразу сказать. да не будем мучаться и тему гадить

]]>
Tue, 19 Sep 2023 11:05:26 -0000
Kort А зачем клонировать такой непростой модуль, как page? Может проще все можно решить?

]]>
Tue, 19 Sep 2023 10:29:40 -0000
Argont #47081 Alex300:

Как работает с пресетом "Удобный" плагина URLEditor:

URL формируется так:

https://domain.tld/extension_code/category/subcategory/post_alias

....

 

спасибо, что ответили.

ну немножко разбираюсь, и разумеется в модуле "pages" у меня категории и алиаса "serials" не будет. это я понимаю, что будут конфликты, если такое чудануть. потому и прошу помощи, если это реально через "functions.custom.php".

то что под капотом у urleditor.functions.php я уже смотрел, написал, что если всё заменить на "video" - то работает. пробывал чисто дополнить тут же, - неполучается. а насчет

1) Использовать хук urleditor.rewrite.first для обработки своих правил разбора URL.

2) Создать свою функцию cot_apply_rwr_custom() и которая будет использоваться для обработки всех правил разбора URL.

тут пока для меня высшая математика для меня, я не знаю что такое хук, или как написать свою функцию.

если для вас это не сложно, прошу написать такую для "video", буду признателен. за любое действенное решение.

]]>
Tue, 19 Sep 2023 07:59:34 -0000
Alex300 Как работает с пресетом "Удобный" плагина URLEditor:

URL формируется так:

https://domain.tld/extension_code/category/subcategory/post_alias

Для модуля страниц extension_code опускается и урл выглядит так: https://domain.tld/category/subcategory/page_alias

Это делается только для модуля страниц т.к. если опускать код и для других расширений, то возможны конфликты. Например если у Вас и в модуле страниц и видео есть категория с кодом serials, то что показывать при обращении по урлу https://domain.tld/serials/? Допустим расставим приорететы и если есть конфликты, показываем контент модуля pages. Но тогда контент категрии serials модуля video просмотреть через web-интерфейс будет невозможно.

 

Но для отдельного частного случая решить такой вопрос вполне реально и есть 2 способа:

Для обоих способов скорее всего понадобится добавить свои правила либо в настройках URLEditor либо в файл datas/urltrans.dat (по аналогии с plugins/urleditor/presets/handy.dat)

1) Использовать хук urleditor.rewrite.first для обработки своих правил разбора URL.

2) Создать свою функцию cot_apply_rwr_custom() и которая будет использоваться для обработки всех правил разбора URL.

Для образца можно заглянуть "под капот" чтобы посмотреть как все работает: https://github.com/Cotonti/Cotonti/blob/master/plugins/urleditor/inc/urleditor.functions.php#L24

 

]]>
Tue, 19 Sep 2023 07:31:04 -0000
Argont давненько о движке читал впервые, потенциал дальнейшей разработки своих проетков на котонти привлекал, но это было как учиться чему-то заново. поближе решил познакомиться сейчас и решил сделать независимый от модуля 'page' на его основе модуль 'video'.
Три раза начинал сначала, и только после последней попытки запустил в браузере свой "первый проект" на котонти.
Но тут вслед за ним пришла бессоная ночь...

Модуль 'page' меня привлек тем, что при включеном 'urleditor', из адресной строки браузера выпадает 'page' и получается красиво
http://example.com/news/postalias или
http://example.com/articles/postalias

А вот с моим модулем 'video', который клонировал с 'page' так не получается, выходит
http://example.com/video/serials/postalias а нужно http://example.com/serials/postalias
http://example.com/video/films/postalias но нужно http://example.com/films/postalias
http://example.com/video/trailer/postalias тут также хочется http://example.com/trailer/postalias

Открыл 'urleditor', и если только там все 'page' наменить 'video' - только тогда работает, но это вовсе не вариант, потому что перестает эта фишка работать на модуле 'page', и при обновлении это я так понимаю перезапишется.

Через .htaccess попробывать, я тут не понимаю.
Может это можно реализовать средствами движка на уровне пользовательских функций, в конфигурационном файле видел сетапку для functions.custom.php, но вот что туда вписать, я понятия не имею.
Или можно и не пытаться, решить такой вопрос не реально?

]]>
Tue, 19 Sep 2023 06:53:38 -0000