Hi David,
Hope all is going well.
I wondered if you could tell me if there is a way to use the explode filter so that the result is placed into a designated field (i.e not the original one holding the unexploded data)?
Thanks in advance.
Regards
Chris
Hi David,
Thanks for the attached. I just added the new filter but something seems to be wrong as no configuration fields are displayed when I try to use it. I initially thought this was because the filter clashed with the existing 'Explode' filter so I replaced the original with the new one above but it still doesn't work.
Would be grateful if you could suggest how I might resolve this.
Thanks in advance.
Regards
Chris
My apologies Chris, it was the $filter_names entry that was wrong;
$filter_names["explodeFromField"] = "Explode From Field";
...corrected above.
Cheers,
David.
--
PriceTapestry.com
Hi David,
Thanks for the update. The filter now works perfectly.
Best regards
Chris
Hi David,
I'm using the above filter to explode the product colour in some merchants feeds. Where the colour is after the specified separator the filter works beautifully. The problem arises where the specified separator is not present, in this scenario the filter takes the full contents of the searched field (product_name) and places it into the 'colour' field. I wondered if you could suggest a way I might remedy this so if the specified explode character or string is not present the filter ignores the row?
Thanks in advance.
Regards
Chris
Hi Chris,
Sure - the following replacement will only have any effect if the Explode Character or String is present:
/*************************************************/
/* Explode From Field */
/*************************************************/
$filter_names["explodeFromField"] = "Explode From Field";
function filter_explodeFromFieldConfigure($filter_data)
{
print "Field Name:<br />";
print "<input type='text' size='40' name='field' value='".widget_safe($filter_data["field"])."' />";
widget_errorGet("field");
print "<br />";
print "Explode Character or String:<br />";
print "<input type='text' size='40' name='text' value='".widget_safe($filter_data["text"])."' />";
widget_errorGet("text");
print "<br />";
print "Return Index: (zero based)<br />";
print "<input type='text' size='3' name='index' value='".widget_safe($filter_data["index"])."' />";
widget_errorGet("index");
}
function filter_explodeFromFieldValidate($filter_data)
{
if (!$filter_data["field"])
{
widget_errorSet("field","required field");
}
if (!$filter_data["text"])
{
widget_errorSet("text","required field");
}
}
function filter_explodeFromFieldExec($filter_data,$text)
{
global $filter_record;
if (strpos($filter_record[$filter_data["field"]],$filter_data["text"])===FALSE) return $text;
$parts = explode($filter_data["text"],$filter_record[$filter_data["field"]]);
$index = intval($filter_data["index"]);
if ($index < 0)
{
$index = count($parts) + $index;
}
return $parts[$index];
}
Hope this helps!
Cheers,
David.
--
PriceTapestry.com
Hi David,
Thanks for the quick response and for the new filter code. I have tried it a couple of times now and it seems to have no effect. I wondered if you could suggest what might be going wrong and how I might resolve it.
Thanks in advance.
Regards
Chris
Hi Chris,
Sorry about that - the test to ignore wasn't using the correct fields - corrected above!
Cheers,
David.
--
PriceTapestry.com
Hi David,
The above code looks identical? Did you update it?
Regards
Chris
Hi Chris,
This is the modified line:
if (strpos($filter_record[$filter_data["field"]],$filter_data["text"])===FALSE) return $text;
...so it's checking if the Explode Character or String exists in the field being tested first, and if not returns the field value to which the filter is being applied unmodified...
Are you still seeing no effect from the change?
Cheers,
David.
--
PriceTapestry.com
Hi David,
Thanks as always for your quick response. Apologies, I just noticed a 1k difference between my local copy (larger) and my remote server copy of the filter file, the upload must have failed (even though my editor confirmed the file transfer). I just ran the filters again and they work perfectly.
Thanks again.
Best regards
Chris
Hi Chris,
You could create a new Explode From Field filter as follows;
/*************************************************/
/* Explode From Field */
/*************************************************/
$filter_names["explodeFromField"] = "Explode From Field";
function filter_explodeFromFieldConfigure($filter_data)
{
print "Field Name:<br />";
print "<input type='text' size='40' name='field' value='".widget_safe($filter_data["field"])."' />";
widget_errorGet("field");
print "<br />";
print "Explode Character or String:<br />";
print "<input type='text' size='40' name='text' value='".widget_safe($filter_data["text"])."' />";
widget_errorGet("text");
print "<br />";
print "Return Index: (zero based)<br />";
print "<input type='text' size='3' name='index' value='".widget_safe($filter_data["index"])."' />";
widget_errorGet("index");
}
function filter_explodeFromFieldValidate($filter_data)
{
if (!$filter_data["field"])
{
widget_errorSet("field","required field");
}
if (!$filter_data["text"])
{
widget_errorSet("text","required field");
}
}
function filter_explodeFromFieldExec($filter_data,$text)
{
global $filter_record;
$parts = explode($filter_data["text"],$filter_record[$filter_data["field"]]);
$index = intval($filter_data["index"]);
if ($index < 0)
{
$index = count($parts) + $index;
}
return $parts[$index];
}
Attach to the field you want to contain the result, but then on the configuration page you can enter the name of an alternative field on which to perform the Explode and extract the result from. Field name, as with placeholders, exactly as appears in the sample data on Feed Registration Step 2...
Cheers,
David.
--
PriceTapestry.com