Filter Records by Author

9 posts by 2 authors in: Forums > CMS Builder
Last Post: November 20, 2014   (RSS)

Hello, All

I'd like to create a simple record filter using a drop down menu which would allow visitors to choose all records by a particular author. I did a quick search of the forum and found something very close to what I was looking for here:

http://www.interactivetools.com/forum/forum-posts.php?how-can-I-create-a-filter-using-php-echo-record-createdBy.fullname-79608

The only snag is it returns the same author multiple times depending on how many records they've created. Somehow I need to "coalesce" the author into a single entry.

Is there a simple way to do this or even another approach?

Thanks,

Perch

By claire - November 14, 2014

Hi Perch

Yeah, you can't use that particular code snippet as is. Here's how you can change it to only get distinct values:

<form method="post" action="blog_list.php">
<h3>&nbsp;Filter by Author</h3>
<select name="createdBy.fullname">

<?php $authors = array_unique(getListOptions('bridlington_blogs', 'createdBy.fullname'));
<?php foreach ($authors as $value => $label): ?>

<option value = "<?php echo $value;?>" <?php selectedIf($value, @$_REQUEST['createdBy.fullname']);?>>

<?php echo $label; ?></option>

<?php endforeach ?>

</select>
<br/>
<div align="center">
<input type="submit" name="search" value=" Show Blogs "/>
</div>
</form>

This should work, provided that you change the table and variable names to whatever you're using.

--------------------

Claire Ryan
interactivetools.com

Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

Hi, Claire -

Thanks for this. Unfortunately, no matter which combination of $tablename and $fieldname I use, the getListOptions() function always throws the same error:

Unknown optionsType ''!

I have no idea what's wrong?!

:0(

Perch

Doh!

Of course, the getListOptions() $fieldname must be a list type field!

OK. Now that we've got that sorted... :o)

Claire, your ammendment to the code doesn't help me much I'm afraid!

:0/

Perch

Hi, Claire -

Thanks for your help. I've spiced it up with a little jScript.

<?php $authors = mysql_select_query("SELECT DISTINCT {$TABLE_PREFIX}accounts.num, fullname from {$TABLE_PREFIX}accounts JOIN {$TABLE_PREFIX}gallery ON {$TABLE_PREFIX}gallery.createdByUserNum = {$TABLE_PREFIX}accounts.num"); ?>

<form method="post" action="?user=<?php echo $record['num'];?>">
<h3>Filter by Author</h3>

<select name="authorNum" onChange="top.location.href = this.form.authorNum.options[this.form.authorNum.selectedIndex].value; return false;">
<?php foreach($authors as $record): ?>
<option value = "?user=<?php echo $record['num'];?>" <?php selectedIf($record['num'], @$_REQUEST['authornum']);?>>
<?php echo $record['fullname']; ?></option>
<?php endforeach ?>
</select>
</form>

Is there a way of re-writing this in jQuery?

:0)

Perch

By claire - November 19, 2014

Hey Perch

You could rewrite this in jQuery, yeah, but is there any particular reason why you'd want to, if this works as is?

--------------------

Claire Ryan
interactivetools.com

Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

Hi, Claire

no reason other than to learn a bit more about jquery!

:0)

Perch

By claire - November 20, 2014

Alright then :) easiest thing to do is put the JS into a separate function, like so:

<select name="authorNum" id="authorNum" onChange="selectChange()">

Then you add something like this elsewhere:

<script>

$(document).ready(function() {
    function selectChange() {
        var val = $("#authorNum").val();
        // do stuff with the value here
    }
});

</script>

That'll get you started at least!

--------------------

Claire Ryan
interactivetools.com

Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/