Automatically add users name
16 posts by 5 authors in: Forums > CMS Builder
Last Post: November 11, 2009 (RSS)
By Moonworks - August 28, 2009
I have members signed up who write film reviews. I want to be able to show the user;s name with the review, without them having to type it in every time. The name I want shown is the 'full name' as shown on the admin section.
Re: [Moonworks] Automatically add users name
By Chris - August 29, 2009
You can look up the "fullname" of the user who created or last updated a record. Here's how...
Let's say you're working with a Product detail page. You'd already have this code in your page:
list($productsRecords, $productsMetaData) = getRecords(array(
'tableName' => 'products',
'where' => whereRecordNumberInUrl(1),
'limit' => '1',
));
$productsRecord = @$productsRecords[0]; // get first record
// show error message if no matching record is found
if (!$productsRecord) {
print "Record not found!";
exit;
}
After that code executes, you'll have access to the Product Record, and you can find the Account "num" of the user who created the Product in the "createdByUserNum" field. To look up that Account record, add this code immediately after the above code:
$accountNum = $productsRecord['createdByUserNum'];
list($accountsRecords, $accountsMetaData) = getRecords(array(
'tableName' => 'accounts',
'where' => "num = {$accountNum}",
'limit' => '1',
));
$accountsRecord = @$accountsRecords[0]; // get first record
Finally, you can display, for example, the "fullname" field from that Account record on the page:
Author: <?php echo $accountsRecord['fullname'] ?><br/>
I hope this helps! Please let us know if you have any questions or comments.
Chris
Re: [chris] Automatically add users name
By Moonworks - August 29, 2009 - edited: August 29, 2009
Notice: Undefined variable: productsRecord in /var/www/vhosts/horroruk.com/httpdocs/filmreviewsdetail.php on line 21 MySQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY fullname, username LIMIT 1' at line 3
Here is the code I have:
<?php
require_once "/var/www/vhosts/horroruk.com/httpdocs/admin/lib/viewer_functions.php";
list($film_reviewsRecords, $film_reviewsMetaData) = getRecords(array(
'tableName' => 'film_reviews',
'where' => whereRecordNumberInUrl(1),
'limit' => '1',
));
$film_reviewsRecord = @$film_reviewsRecords[0]; // get first record
// show error message if no matching record is found
if (!$film_reviewsRecord) {
print "Record not found!";
exit;
}
$accountNum = $productsRecord['createdByUserNum'];
list($accountsRecords, $accountsMetaData) = getRecords(array(
'tableName' => 'accounts',
'where' => "num = {$accountNum}",
'limit' => '1',
));
$accountsRecord = @$accountsRecords[0]; // get first record
?>
Re: [Moonworks] Automatically add users name
By Chris - August 29, 2009
In my example, the detail page variable I'm using is called $productsRecord. In your detail page, I can see that your variable is called $film_reviewsRecord.
Simply change this line:
$accountNum = $productsRecord['createdByUserNum'];
to this:
$accountNum = $film_reviewsRecord['createdByUserNum'];
Chris
Re: [chris] Automatically add users name
By Moonworks - August 29, 2009 - edited: August 29, 2009
Re: [Moonworks] Automatically add users name
By Chris - August 29, 2009
Chris
Re: [chris] Automatically add users name
By Moonworks - August 29, 2009 - edited: August 29, 2009
Re: [Moonworks] Automatically add users name
By Chris - August 29, 2009
This gets a little more complicated on a List page since you'll be doing many lookups.
Here's the code I used on my list page:
list($productsRecords, $productsMetaData) = getRecords(array(
'tableName' => 'products',
));
// collect a list of all createdByUserNum in this record set
function collectCreatedByUserNum($record) { return $record['createdByUserNum']; }
$accountNums = array_unique(array_map('collectCreatedByUserNum', $productsRecords));
// fetch only the account records we need
list($accountsRecords, $accountsMetaData) = getRecords(array(
'tableName' => 'accounts',
'where' => "num IN (" . join(",", $accountNums) . ")"
));
// index account records by num
function collectNum($record) { return $record['num']; }
$accountsRecordsByNum = array_combine(array_map('collectNum', $accountsRecords), $accountsRecords);
// add 'createdByUserNumAccount' key to records which links to account record
foreach ( array_keys($productsRecords) as $key ) {
$record =& $productsRecords[$key];
$record['createdByUserNumAccount'] = $accountsRecordsByNum[$record['createdByUserNum']];
}
Then, later in my page:
Author: <?php echo $record['createdByUserNumAccount']['fullname'] ?><br/>
You'll find the variable $productsRecords used several times above, make sure you replace them all with your own variable name. :)
Sorry the code is so complicated! If I think of a simpler way to do that, I'll post it here.
Hope this helps! Let us know if you have any questions or comments.
Chris
Re: [chris] Automatically add users name
By Moonworks - August 29, 2009
Re: [Moonworks] Automatically add users name
By Chris - August 29, 2009
Keep up the good work! :)
Chris