Своя настройка ЧПУ

Здесь будем собирать общую полезную информацию по системе.
Аватара пользователя
duncan
Наш человек
Сообщения: 255
Зарегистрирован: 24 авг 2015, 22:44
Откуда: місто Лева
Благодарил (а): 37 раз
Поблагодарили: 17 раз

Своя настройка ЧПУ

Сообщение duncan » 27 дек 2016, 17:33

АВЕ позволяет гибко настраивать ЧПУ, указывать в настройках, генерировать и проч.
можно также ещё более автоматизировать этот процес

1. генерация ЧПУ с родительским префиксом
например у нас есть документ "Новости" с ЧПУ -- news
и мы хотим, чтобы все новости, которые отображаются на сайте, получали автоматический префикс news (http://nash-sait/news/nazvanie-stranicy)
для настройки открываем рубрики -- новости

Изображение

и в "Исполняемый код для рубрик" пишем код:

Изображение

Код: Выделить всё

<?php
$data['document_parent'] = 5; // айдишка родительского документа
$parent_doc_alias = get_document($data['document_parent'], 'document_alias');   

// Если новый документ или отсутствует юрл   
$data['document_alias'] = prepare_url( (empty($data['document_alias']) || $_REQUEST['action'] == 'new') ? trim($parent_doc_alias . '/' . $data['doc_title'], '/') : $data['document_alias']   );
?>


кто не понял, что за цифра здесь: $data['document_parent'] = 5;

Изображение

Аватара пользователя
duncan
Наш человек
Сообщения: 255
Зарегистрирован: 24 авг 2015, 22:44
Откуда: місто Лева
Благодарил (а): 37 раз
Поблагодарили: 17 раз

Своя настройка ЧПУ

Сообщение duncan » 27 дек 2016, 17:45

2. префикс ЧПУ из рубрики

распрастранённая вещь -- использование "документа из рубрики", когда создаём категории и делаем динамическую привязку документов к этим категориям
и если нужно, чтобы префиксом в урле был ЧПУ категории, тогда используем такой код:

Код: Выделить всё

<?php
   // Получаем alias документа из рубркии
   $rubric_prefix = get_document($data['feld'][4], 'document_alias');
   
   // Назначаем парент этому документу, изсходя из документа из рубрики
   $data['document_parent'] = $data['feld'][4];
   
   //Собираем alias документа, если документ новый или alias не был передан
   $data['document_alias'] = prepare_url( (empty($data['document_alias']) || $_REQUEST['action'] == 'new')
      ? trim($rubric_prefix . '/' . $data['doc_title'], '/')
      : $data['document_alias'] );
?>


$rubric_prefix = get_document($data['feld'][4], 'document_alias'); -- вот это значение, это айди поля "документ из рубрики"

Изображение

$data['document_parent'] = $data['feld'][4]; -- а это значение, для автоматической привязки документа к категории:

Изображение

arevuare
Участник
Сообщения: 14
Зарегистрирован: 09 май 2018, 09:16
Благодарил (а): 6 раз

Своя настройка ЧПУ

Сообщение arevuare » 09 май 2018, 09:40

Разбираю второй вариант и не могу понять, это так и задумано или у только меня так?
После сохранения получаю префиксы материалов типа:
blog/dizajn
blog/dizajn-1
blog/dizajn-2
blog/dizajn-3
...
blog/dizajn-12
а надо так: blog/dizajn/stranica
конечно, по нажатию на кнопку "сформировать", генерируется алиас документа и дописывается к префиксу, но получается вот так: blog/dizajn-12/stranica, что приводит к тому что опять ручками каждый материал всегда надо править.

Проблема в чем?
? trim($rubric_prefix . '/' . $data['doc_title'], '/')
этот код генерирует только префиксы? а что надо дописать чтобы генерировался полный ЧПУ адрес?

Аватара пользователя
M@dD3n
Администратор
Сообщения: 734
Зарегистрирован: 25 июн 2015, 09:20
Откуда: Russia
Благодарил (а): 32 раза
Поблагодарили: 111 раз
Контактная информация:

Своя настройка ЧПУ

Сообщение M@dD3n » 09 май 2018, 10:21

arevuare писал(а):Источник цитаты Проблема в чем?
? trim($rubric_prefix . '/' . $data['doc_title'], '/')
этот код генерирует только префиксы? а что надо дописать чтобы генерировался полный ЧПУ адрес?


Советую проверять данные перед сохранением, простым дебагом, хотя бы var_dump
Или встроенным, вставить в конце кода, тогда сохранения не будет, но на экран выведутся все данные

Код: Выделить всё

<?php Debug::_echo($data, true); ?>


Дальше:
Внимательнее с этим условием
Собираем alias документа, если документ новый или alias не был передан
empty($data['document_alias']) || $_REQUEST['action'] == 'new')

Ну и
$rubric_prefix - это alias документа из связанного документа
$data['document_title'] - title текущего документа

Код: Выделить всё

<?php
   
// Поле "Документ из рубрики"
   
$field $data['feld'][ID]; // Заменить ID на id поля
 
   // Получаем alias документа из рубркии
   
$rubric_prefix get_document($field'document_alias');

   
// Назначаем парент этому документу, изсходя из документа из рубрики
   
$data['document_parent'] = $field;

   
//Собираем alias документа, если документ новый или alias не был передан
   
$data['document_alias'] = (empty($data['document_alias']) || $_REQUEST['action'] == 'new')
      
// Создаем новый alias
      
$rubric_prefix '/' prepare_url(trim($data['document_title'], '/'))
      
// Используем текущий 
      
$data['document_alias'];

   
// Дебаг срабатывает при сохранении документа
   
Debug::_echo($datatrue); // Удалить, если не нужен
?>

arevuare
Участник
Сообщения: 14
Зарегистрирован: 09 май 2018, 09:16
Благодарил (а): 6 раз

Своя настройка ЧПУ

Сообщение arevuare » 09 май 2018, 14:19

Быстро ответили, не ожидал )). Спасибо. И С Праздником!
Но все равно не работает, код заменил, ID поля, так парент перестал передаваться и алиас просто генерит тайтл документа и все, без префикстов и прочего (но зато алиас генерит )))) :no:

Аватара пользователя
M@dD3n
Администратор
Сообщения: 734
Зарегистрирован: 25 июн 2015, 09:20
Откуда: Russia
Благодарил (а): 32 раза
Поблагодарили: 111 раз
Контактная информация:

Своя настройка ЧПУ

Сообщение M@dD3n » 10 май 2018, 09:23

Выше, поправил код - все работает

Аватара пользователя
BITMAP
В теме
Сообщения: 53
Зарегистрирован: 25 июн 2015, 14:51
Откуда: Электроугли, МО
Благодарил (а): 1 раз
Поблагодарили: 8 раз
Контактная информация:

Своя настройка ЧПУ

Сообщение BITMAP » 10 май 2018, 09:43

Для каталога товаров с категориями где товар связывается с родительской категорией через "документ из рубрики" я обычно прописываю в "исполняемый код для рубрики" следующий код:

Код: Выделить всё

if ($data['feld'][20] !='') { // если документ из рубрики выбран
   $data['document_parent'] = $data['feld'][20]; // присваиваю родительскую категорию для хлебных крошек
   $parent_alias = get_document($data['document_parent'], 'document_alias'); // забираю алиас родительской категории
   $pos = strpos($data['document_alias'], $parent_alias); // проверяю есть ли уже родительский алиас в текущем адресе
   if ($pos === false) { // если нет то
      $data['document_alias'] = $parent_alias . '/' . ($data['feld'][19] != '' ? prepare_url($data['feld'][19]) : preg_replace('/[^A-Za-z0-9\-]/', '', prepare_url($data['doc_title']))); // собираю адрес через сборку адреса родительской категории + очищеный тайтл текущего документа или название товара ( поле 19)
   }
}
Кто к нам с чем зачем... тот от того и того!

arevuare
Участник
Сообщения: 14
Зарегистрирован: 09 май 2018, 09:16
Благодарил (а): 6 раз

Своя настройка ЧПУ

Сообщение arevuare » 10 май 2018, 11:25

M@dD3n писал(а):Выше, поправил код - все работает

Супер! Класс. Все работает ) Спасибо! :thumbup:


Вернуться в «База знаний»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей