modx evo 1.0.12

aeromouse
На сайте с 15.05.2006
Offline
245
1007

Подскажите, как в сабже поменять uri ресурсов в автоматическом режиме? Проблема в том что руками пересохранить каждый документ - долго очень...

Есть какое нибудь решение?

IL
На сайте с 20.04.2007
Offline
435
#1
aeromouse:
Есть какое нибудь решение?

SQL запрос?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
aeromouse
На сайте с 15.05.2006
Offline
245
#2
ivan-lev:
SQL запрос?

научите? :)

IL
На сайте с 20.04.2007
Offline
435
#3
aeromouse:
научите?

чему? SQL? :D

Ну.. как-то так:

UPDATE {$prefix}_site_content set alias = 'test2' WHERE id=5;

или

...WHERE alias=:old_alias

Если вложенные адреса не используются или (используются адреса вложенные, но при этом структура сайта не меняется, а меняются только URL-ы) - этот вариант вполне подойдёт.

Можно накидать PHP скрипт, который на вход берёт старый и новый адрес... из файла, например

old_url new_url
old_url2 new_url2

и формирует/выполняет нужные SQL-запросы в цикле...

Да.. после всех этих махинаций следует кэш очистить..

* ещё для ускорения ручной работы (когда её много сразу) - можно отключить автоматическую очистку кэша после каждого сохранения

aeromouse
На сайте с 15.05.2006
Offline
245
#4

там плагин transalias сам переименовывает пейджтайтл в нужные uri, которые формируются из названия продукции. Самому писать список нужных урлов - это проще руками пересохранять :)

Agel Nash
На сайте с 01.12.2008
Offline
61
#5

1) Качайте либу MODxAPI и закидывайте в папку /assets/lib/MODxAPI/

2) Отключаете плагины кроме TransAlias

3) В корне сайта файл такого содержания


<?php
set_time_limit(0);
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors','On');

define('MODX_API_MODE', true);
include_once(dirname(__FILE__)."/index.php");
require_once MODX_BASE_PATH."/assets/snippets/phpthumb/phpthumb.class.php";

$modx->db->connect();
if (empty ($modx->config)) {
$modx->getSettings();
}

require_once MODX_BASE_PATH."/assets/lib/MODxAPI/modResource.php";
$q = $modx->db->query("SELECT id FROM ".$modx->getFullTableName('site_content'));
while($row = $modx->db->getRow($q)){
$DOC = new modResource($modx);
$DOC->edit($row['id'])->save(true, true);
}
echo 'done';

и открываете его в браузере.

Я (http://agel-nash.ru) - вильгельм "ЗАКОЛЕБАТЕЛЬ" Аудит безопасности MODX сайтов (/ru/forum/783778) | Обучение созданию сайтов (http://modcoach.info/)
IL
На сайте с 20.04.2007
Offline
435
#6
aeromouse:
Подскажите, как в сабже поменять uri ресурсов в автоматическом режиме?
aeromouse:
там плагин transalias сам переименовывает пейджтайтл в нужные uri, которые формируются из названия продукции.

Строго говоря, есть разница между "поменять URI" и автоматически их сгенерировать на основе pagetitle. Ничего готового для Evo не встречал (это не значит, что такого нет)..

Чуть ниже код модуля /использовать на свой страх и риск и далее по тексту :D/, который сгенерирует алиасы на основе pagetitle с учётом настроек TransAlias-а. Если документов много

- можно "экспериментировать" (обновлять частями) с числами 0 (ID стартового документа) и 7 (глубина просмотра)

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

<?php /* module FixAliases */

echo '<br>Start FixAliases<br>';
$ids = $modx->getChildIds(0,7);
if (!$docs = $modx->getDocuments($ids, 1, 0, 'id,pagetitle',"alias=''"))
exit('Nothing to fix');

$table = $modx->getFullTableName('site_content');

foreach ($docs as $k => $doc) {
$alias = $modx->stripAlias($doc['pagetitle']);
$modx->db->update(array('alias'=>$alias),$table, 'id='.$doc['id']);
echo "<br>updated &laquo;{$doc['pagetitle']}&raquo; {$doc['id']} alias=$alias";
}

echo '<br>End FixAliases<br>';

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий