Если вики включает в себя хотя бы несколько десятков страниц, то отслеживать её целостность уже становится нелегко. Самым очевидным средством такого отслеживания является поиск неработающих ссылок, указывающих на несуществующие страницы (причины их несуществования могут быть самыми разными — забыли создать, переименовали не так что-то существовавшее, допустили опечатку в ссылке или имени страницы, да мало ли что).
Данный скрипт можно вставить в произвольное место вики. Он не требует аргументов и возвращает либо таблицу с перечнем битых ссылок (и указанием страниц, на которых они присутствуют), либо сообщение (в зависимости от предпоследней строки — возможно, что и пустое) о том, что битых ссылок не найдено.
Нужно иметь в виду, что две подряд квадратные скобки, означающие в Trunk Notes ссылку, в языке Lua имеют собственное значение (и не одно), а также могут употребляться в скриптах при оформлении результатов работы. Во избежание ложных срабатываний лучше записывать свои скрипты в вики так, чтобы эти скобки в них подряд не встречались. Например, вместо можно написать '['..'['
и т.п.
-- Сканирует все страницы вики и формирует таблицу
-- с найденными ссылками на несуществующие страницы
-- Служебные страницы, имена которых начинаются с
-- 'Docs:' и 'Special:', в сканирование не включаются
-- Проверяются только ссылки, оформленные в двойных
-- квадратных скобках
alltitles=wiki.titles()
res='Страницы | Нерабочие ссылки\n|----|----|\n'
for i=1,#alltitles do
curttl=alltitles[i]
if string.find(curttl,'Docs:') or string.find(curttl,'Special:') then else
crpg=wiki.get(curttl)
curpage=tostring(crpg.contents)
for lnk in string.gmatch(curpage,'%[%[(.-)%]%]') do
j,foo = string.find(lnk,'|')
if j then ttl=string.sub(lnk,1,j-1) else ttl=lnk end
if not wiki.exists(ttl)
then res=res..'['..'['..curttl..']'..'] | '..'['..'['..ttl..']'..']\n'
cnt=1
end
end
end
end
if not cnt then res='Нерабочих ссылок не найдено.\n' end
return res