А зачем вообще в сниппет передавать номер документа, если его там легко можно узнать с помощью $modx->documentIdentifier.
А что именно попадает в сниппет? Можете просто распечатать это значение?
Если вызвать сниппет некэшированным или перенести вызов в шаблон, все будет нормально.
А так все связано с особенностями парсера MODx. При первом проходе он находит все [* *] в шаблоне, подставляет, а потом выполняет сниппеты. То есть он находит в шаблоне [*content*], подставляет контент, а потом выполняет сниппет [[bookmark? &id=`[*id*]`]], в результате переменной $id передается не 5, а строка [*id*], которая и выводится в сниппете. При следующем проходе [*id*] меняется на 5, и на странице мы видим 5. Если же вызывать некэшированный сниппет, он будет выполнен после всех проходов парсера, и в параметры будет передано значение 5. Точно так же, если вызов сниппета стоит непосредственно в шаблоне, все будет обработано при первом проходе.
спасибо, очень все грамотно и понятно описали