При использовании обеих расширений обнаружилась проблема. При создании PDF-файлов ссылкой /another_page/print.pdf в полученном файле вместо содержимого странички появлялось содержимое первой страницы сайта. Анализ кода показал, что причиной оказалась функция в pdf_generator2, отвечающая за перехват альтернативных форматов вызова PDF-генератора, в том числе по расширению .pdf.
Ну а так как этим расширением уже занимается RealURL, то PDF-генератору в этой альтернативной функции остаются только «рожки да ножки». ID страницы заменяется словом «print», а позже превращается в Integer. А PHP, как известно, из всех символьных значений при смене типа в Integer делает ноль. То есть из ID=»print» получается ID=0. А на ID = 0 у меня ссылка на главную страницу. Вот и вся проблема.
Чтобы не долго не философствовать по-Чернышевскому, я несколько модифицировал проблемную функцию tslib_fe_checkAlternativeIdMethods, отключив в ней «самоуправство»
Получилось вот что:
function tslib_fe_checkAlternativeIdMethods($params, $ref) { $debug = FALSE; $useOriginalCode = FALSE; $pObj = &$params['pObj']; if (t3lib_div::int_from_ver($GLOBALS["TYPO_VERSION"])>= 3007000) { $siteScript = t3lib_div::getIndpEnv('TYPO3_SITE_SCRIPT'); } else { $siteScript = $GLOBALS["HTTP_SERVER_VARS"]["REQUEST_URI"]; } if ($siteScript && substr($siteScript,0,9)!='index.php') { // If there has been a redirect (basically; we arrived here otherwise than via "index.php" in the URL) this can happend either due to a CGI-script or because of reWrite rule. Earlier we used $_SERVER['REDIRECT_URL'] to check but $uParts = parse_url($siteScript); // Parse the path: $requestFilename = trim(ereg_replace('.*\/','',$uParts['path'])); // This is the filename of the script/simulated pdf-file. $parts = explode('.',ereg_replace('.*\/','',$requestFilename)); $pCount = count($parts); $debugArray = array( '$siteScript' => $siteScript, 'parse_url($siteScript)' => parse_url($siteScript), '$requestFilename' => $requestFilename, '$parts of $requestFilename' => var_export($parts,true), 'count($parts)' => count($parts), '$pObj->type (not modificated)' => $pObj->type, '$pObj->id (not modificated)' => $pObj->id ); $NewType = 'Not modified'; $NewId = 'Not modified'; $debugArray['$parts[$pCount-1] = '] = $parts[$pCount-1]; $debugArray['$pCount = '] = $pCount; if ($parts[$pCount-1]=='pdf') { if ($pCount>2) { $NewType = intval($parts[$pCount-2]); $NewId = $parts[$pCount-3]; } else { $NewType = $GLOBALS['pdf_generator2_parameters']['typeNum']; $NewId = $parts[0]; } if ($useOriginalCode) { $pObj->type = $NewType; $pObj->id = $NewId; } } $debugArray['$pObj->type (modificated)'] = $NewType; $debugArray['$pObj->id (modificated)'] = $NewId; if ($debug) { $fd=fopen('typo3temp/html2ps_UrlParameters.html', 'wb'); fwrite($fd,t3lib_div::view_array($debugArray)); fclose($fd); } } }
Теперь всё работает как надо.