Форумы / National / Russian / Тех. поддержка / [Решено] URL in Page module cloned

12>>>

Argont
#1 19.09.2023 06:53

давненько о движке читал впервые, потенциал дальнейшей разработки своих проетков на котонти привлекал, но это было как учиться чему-то заново. поближе решил познакомиться сейчас и решил сделать независимый от модуля '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, но вот что туда вписать, я понятия не имею.
Или можно и не пытаться, решить такой вопрос не реально?

иногда поржать над задравшим подбородок разработчиком
Отредактировано: Alex300 (27.09.2023 05:02, 7 месяцев назад)
Alex300
#2 19.09.2023 07:31

Как работает с пресетом "Удобный" плагина 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

 

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Argont
#3 19.09.2023 07:59
#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", буду признателен. за любое действенное решение.

иногда поржать над задравшим подбородок разработчиком
Kort
#4 19.09.2023 10:29

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

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Argont
#5 19.09.2023 11:05
#47083 Kort:

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

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

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

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

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

иногда поржать над задравшим подбородок разработчиком
Отредактировано: Argont (19.09.2023 11:14, 7 месяцев назад)
Kort
#6 19.09.2023 11:26

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

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Argont
#7 19.09.2023 11:33
#47085 Kort:

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

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

но не то.

всем спасибо

иногда поржать над задравшим подбородок разработчиком
Kort
#8 19.09.2023 12:06
#47086 Argont:

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

но не то.

всем спасибо

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

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Alex300
#9 19.09.2023 12:16
#47085 Kort:

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

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

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Argont
#10 19.09.2023 13:40

Господа, повторюсь, предмет обсуждения иной.

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

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

иногда поржать над задравшим подбородок разработчиком
Alex300
#11 20.09.2023 05:44

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

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

Нужно сделать обработчик события (хука). Для этого в корень расширения 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. код писался навскидку, в качестве примера и может потребоваться отладка

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Отредактировано: Alex300 (20.09.2023 07:40, 7 месяцев назад)
Argont
#12 20.09.2023 07:49
#47090 Alex300:

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

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

. . . . .

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

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

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

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

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

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

иногда поржать над задравшим подбородок разработчиком
Отредактировано: Argont (20.09.2023 07:57, 7 месяцев назад)
Kort
#13 20.09.2023 08:27

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

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

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

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

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

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

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Отредактировано: Kort (20.09.2023 08:46, 7 месяцев назад)
Argont
#14 20.09.2023 09:02
#47092 Kort:

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

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

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

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

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

иногда поржать над задравшим подбородок разработчиком
Kort
#15 20.09.2023 09:09

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

SED.by - создание сайтов, разработка плагинов и тем для Котонти

12>>>