You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
File: /www/core/components/tagger/src/Utils.php Line 17
I encountered a PHP Fatal error: Uncaught TypeError in the Tagger component when using TaggerGetResourcesWhere in MODX Revo. The issue arises specifically when passing the output of [[!queryString:urldecode]] as the &tags parameter. I have done it this way many times before and not had any issue.
Error Details:
[14-May-2024 16:43:36 Europe/London] PHP Fatal error: Uncaught TypeError: explode(): Argument #2 ($string) must be of type string, array given in /www/core/components/tagger/src/Utils.php:17
Stack trace:
#0 /www/core/components/tagger/src/Utils.php(17): explode()
#1 /www/core/components/tagger/src/Tagger.php(114): Tagger\Utils::explodeAndClean()
#2 /www/core/cache/includes/elements/modx/revolution/modsnippet/47.include.cache.php(208): Tagger\Tagger->getCurrentTags()
#3 /www/core/src/Revolution/modScript.php(88): include('...')
#4 /www/core/src/Revolution/modParser.php(508): MODX\Revolution\modScript->process()
#5 /www/core/components/pdotools/src/Parsing/Parser.php(276): MODX\Revolution\modParser->processTag()
#6 /www/core/src/Revolution/modParser.php(221): ModxPro\PdoTools\Parsing\Parser->processTag()
#7 /www/core/components/pdotools/src/Parsing/Parser.php(73): MODX\Revolution\modParser->processElementTags()
#8 /www/core/src/Revolution/modTemplate.php(147): ModxPro\PdoTools\Parsing\Parser->processElementTags()
#9 /www/core/src/Revolution/modResource.php(485): MODX\Revolution\modTemplate->process()
#10 /www/core/src/Revolution/modResource.php(465): MODX\Revolution\modResource->process()
#11 /www/core/src/Revolution/modResponse.php(72): MODX\Revolution\modResource->prepare()
#12 /www/core/src/Revolution/modRequest.php(154): MODX\Revolution\modResponse->outputContent()
#13 /www/core/src/Revolution/modRequest.php(138): MODX\Revolution\modRequest->prepareResponse()
#14 /www/core/src/Revolution/modX.php(1499): MODX\Revolution\modRequest->handleRequest()
#15 /www/index.php(63): MODX\Revolution\modX->handleRequest()
#16 {main}
thrown in /www/core/components/tagger/src/Utils.php on line 17
Steps to Reproduce:
Use TaggerGetResourcesWhere in a snippet call with [[!queryString:urldecode]] as the &tags parameter.
Example usage:
When the [[!queryString:urldecode]] output is replaced directly with a string like tag1,tag2 it works as expected.
Relevant Code:
The QueryString snippet used for processing tags is as follows:
<?php
$result = '';
// Check if 'tag' exists
if (isset($_GET['tag'])) {
// Normalize 'tag' to an array if it's a string
$tags = is_array($_GET['tag']) ? $_GET['tag'] : explode(",", $_GET['tag']);
// Clean up the array by trimming whitespace and removing empty entries
$tags = array_filter(array_map('trim', $tags), function($value) {
return $value !== '';
});
// Implode the array into a comma-separated string if not empty
if (!empty($tags)) {
$result = implode(",", $tags);
}
}
echo $result; // This ensures we are returning a string
How I got it to work:
I adjusted the explodeAndClean function to handle array inputs by converting them to strings before processing. Here is the updated function:
public static function explodeAndClean($input, $delimiter = ',', $keepZero = false)
{
if (is_array($input)) {
$input = implode($delimiter, $input); // Ensure $input is a string
}
$array = explode($delimiter, $input); // Now explode it into parts
// Optionally clean the array
$array = array_filter($array, function ($item) use ($keepZero) {
return $keepZero ? $item !== '' : $item !== '' && $item !== '0';
});
return $array;
}
File: /www/core/components/tagger/src/Utils.php Line 17
I encountered a PHP Fatal error: Uncaught TypeError in the Tagger component when using TaggerGetResourcesWhere in MODX Revo. The issue arises specifically when passing the output of
[[!queryString:urldecode]]
as the &tags parameter. I have done it this way many times before and not had any issue.Error Details:
Steps to Reproduce:
Use TaggerGetResourcesWhere in a snippet call with
[[!queryString:urldecode]]
as the &tags parameter.Example usage:
When the
[[!queryString:urldecode]]
output is replaced directly with a string liketag1,tag2
it works as expected.Relevant Code:
The QueryString snippet used for processing tags is as follows:
How I got it to work:
I adjusted the explodeAndClean function to handle array inputs by converting them to strings before processing. Here is the updated function:
Additional Information:
MODX version: 3.0.4
Tagger version: 2.0.0
PHP version: 8.3
The text was updated successfully, but these errors were encountered: