From: Yongming W. <wa...@tc...> - 2012-02-24 21:19:09
|
Yeeeeeeees, after I added Demian's code snippet in MarcRecord::getRealTimeHodlings(), it works!!!!!!!! Thank you so much, Demian! And thank you so much, Julia! It absolutely made my day! Now, forgive my greediness. If I may ask: What should I do if I want the location and call number information to come up on the search result page? Right now that page still displays the fake location and call number from the sample driver. How should I go about to make it happen? Thanks very much. Yongming --------------------------------- Yongming Wang Systems Librarian The College of New Jersey Library phone: 609-771-3337 email: wa...@tc... --------------------------------- ----- Original Message ----- From: "Demian Katz" <dem...@vi...> To: "Yongming Wang" <wa...@tc...>, "vufind-general vufind" <vuf...@li...> Sent: Friday, February 24, 2012 12:35:14 PM GMT -05:00 US/Canada Eastern Subject: RE: [VuFind-General] translate_index_not_found(0) Okay, that all makes sense. As you say, the translate_index_not_found is not the real problem -- it's just a symptom you see during debug. You don't need to add the "Stacks" string anywhere. The problem is not related to translating "Stacks" -- if the "Stacks" value were getting to the correct place, you would have seen "translate_index_not_found(Stacks)" instead of "translate_index_not_found(0)". So the problem is figuring out why the translator is getting "0" when you expect it to get "Stacks." Come to think of it, I'm pretty sure I see what is happening. The format returned by getRealTimeHoldings is not the same format returned by the ILS driver's getHolding method. getRealTimeHoldings uses the HoldLogic class to rearrange the data so that it is keyed by location. So what seems to be happening is you have a standard PHP array with numeric keys (0, 1, 2, 3...) and VuFind is expecting string keys. Thus it tries to display a location called "0". It's possible that some of this confusion has to do with VuFind code evolving since Julia built her solution. Hopefully it's not too hard to fix. You might just need to add this code to MarcRecord somewhere after your array is built: global $configArray; $hideHoldings = isset($configArray['Record']['hide_holdings']) ? $configArray['Record']['hide_holdings'] : array(); $holdings = array(); if (count($result)) { foreach ($result as $copy) { $show = !in_array($copy['location'], $hideHoldings); if ($show) { $holdings[$copy['location']][] = $copy; } } } return $holdings; (this assumes that your array is called $results). - Demian ________________________________________ From: Yongming Wang [wa...@tc...] Sent: Friday, February 24, 2012 12:22 PM To: vufind-general vufind Subject: Re: [VuFind-General] translate_index_not_found(0) let me explain what I want to do: First of all, I don't have an ILS. So I use the Sample driver in config.ini. In all my MARC records, however, there is a 996 field whose subfield b contains the item location information such as "Stacks", and whose 050 field contains the call number. I want to display, on the holding tab, this location and call number from my MARC records, instead of the fake ones from the sample driver, which is always "3rd Floor Main Library and A1234.567." I read Julia Bauder's article from code4lib journal. She accomplished the above - to display the location and call number from her MARC records - by adding a getStatus($id) function in MarcRecord.php and modified the getRealTimeHolding($patron = false) function in the same file. So I borrowed her codes from her article. But I couldn't make it to work. btw, when I use debug_backtrace() in I18N_Translator::translate(), there is so much data that it blows out the browser! :-( Another thing I just noticed: the Translate_index_not_found() is not actually an error message. It appears whenever the debug mode is on, and the content inside the () is the location information. So when I put back the original MarcRecord.php, it has translate_index_not_found(3rd Floor Main Library) displayed, the location from the sample driver. Maybe I should hard-code the "Stacks" location parameter in certain php file, instead of the lang/en.ini file? I'm not sure. Thanks, Yongming --------------------------------- Yongming Wang Systems Librarian The College of New Jersey Library phone: 609-771-3337 email: wa...@tc... --------------------------------- ----- Original Message ----- From: "Demian Katz" <dem...@vi...> To: "Yongming Wang" <wa...@tc...>, "Alan Rykhus" <ala...@mn...> Cc: "vufind-general vufind" <vuf...@li...> Sent: Friday, February 24, 2012 10:45:34 AM GMT -05:00 US/Canada Eastern Subject: RE: [VuFind-General] translate_index_not_found(0) error I'm not exactly sure what you are doing -- there is no MarcRecord::getStatus() method in the trunk, so I'm assuming you're dealing with significantly customized code... Without knowing more about the context, I can't really speculate exactly what is happening... However, I can tell you that if you see Translate_index_not_found(0), that means that someplace, the translate code was called on the value "0". The text inside the parentheses is the exact string that was sent to the translator... If that isn't enough of a clue to help you, try adding this code to the top of I18N_Translator::translate() in web/sys/Translator.php: if ($phrase == 0) { print_r(debug_backtrace()); } This will put a whole bunch of data on the screen for you -- probably more than you ever wanted to see -- but it will tell you which code called the translator with the "0" value, and that might help you figure out what is going on. debug_backtrace() is a very handy tool at times! - Demian ________________________________________ From: Yongming Wang [wa...@tc...] Sent: Friday, February 24, 2012 10:36 AM To: Alan Rykhus Cc: vufind-general vufind Subject: Re: [VuFind-General] translate_index_not_found(0) error Thanks Alan for your advise. I feel a little stupid though. I realize that I can simply use "echo" to do that. And thank Alan for the print_r for printing the array value. Following is the values of $holding[]: DEBUG: holdings = : Array ( [0] => Array ( [availability] => 1 [status] => Available [location] => Stacks [reserve] => No [callnumber] => E169.1 .N37 1973 [duedate] => [number] => 1 ) ) So the location does get "Stacks" from the 996 field, a very good sign. But why I still get "Translate_index_not_found(0)" error? Any suggestions? Thanks a lot. Yongming --------------------------------- Yongming Wang Systems Librarian The College of New Jersey Library phone: 609-771-3337 email: wa...@tc... --------------------------------- ----- Original Message ----- From: "Alan Rykhus" <ala...@mn...> To: "vufind-general vufind" <vuf...@li...> Sent: Friday, February 24, 2012 10:09:17 AM GMT -05:00 US/Canada Eastern Subject: Re: [VuFind-General] debugging - print out variable value Hello Yongming, I'm probably a little old fashioned on the debugging. But I open a file and write to it. $fh = fopen("/tmp/testing", "a"); fwrite($fh, "The value of locationstuff is: " . $locationstuff . "\n"); fwrite($fh, "The value of thislocation is: " . $thislocation . "\n"); If the variable is an array you need to run it through print_r $tmp_var = print_r($holding, true); fwrite($fh, "The value of holding is: " . $tmp_var . "\n"); al On Fri, 2012-02-24 at 09:24 -0500, Yongming Wang wrote: > Dear VuFind Community, > > Is there a way to print out the variable value in debugging mode? This is what I want to accomplish: > > I am trying to do what Julia Bauder did for her offline VuFind project. Specifically, I want to display the location from my MARC record's 996 field and call number from 050 field. I added the following codes to MarcRecord.php (totally borrow it from Julia Bauder - a big thank you to Julia!): > > public function getStatus($id) > { > $callnumber = parent::getcallnumber(); > if ($this->_getFirstFieldValue('090', array('a')) != NULL) { > $parttwo = $this->_getFirstFieldValue('090', array('b')); > $callnumber .= " " . $parttwo; > } > elseif ($this->_getFirstFieldValue('086', array('a')) != NULL) { > $callnumber = $this->_getFirstFieldValue('086', array('a')); > $parttwo = $this->_getFirstFieldValue('086', array('b')); > $callnumber .= " " . $parttwo; > } > elseif ($this->_getFirstFieldValue('050', array('a')) != NULL) { > $parttwo = $this->_getFirstFieldValue('050', array('b')); > $callnumber .= " " . $parttwo; > } > $locationstuff = $this->marcRecord->getFields('996'); > $thislocation = $locationstuff[0]->getSubfields('b'); > foreach ($thislocation as $thislocationA) { > $holding[] = array('availability' => 1, > 'status' => 'Available', > 'location' => $thislocationA->getData(), > 'reserve' => 'No', > 'callnumber' => $callnumber, > 'duedate' => '', > 'number' => 1); > } > return $holding; > } > > And this is how my MARC record's 996 field looks like: > 996 0 0 |b Stacks |h PS1331 .W3 1967 |a NJI |c library |n 8846 |m 8176 > > I really want to see the values of $locationstuff and $thislocation on the screen when I click the title to go to the record page, because right now I got "translate_index_not_found(0)" error instead of "Stacks" as location on the record page. I suspect that those variables get the values from the MARC record. > > I added Stacks = "Stacks" to the end of lang/en.ini file but no use. > > How can I do that? or Can I do that? > > > Thanks very much. > > > > Yongming > > --------------------------------- > Yongming Wang > Systems Librarian > The College of New Jersey Library > phone: 609-771-3337 > email: wa...@tc... > --------------------------------- > > ------------------------------------------------------------------------------ > Virtualization & Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > VuFind-General mailing list > VuF...@li... > https://lists.sourceforge.net/lists/listinfo/vufind-general -- Alan Rykhus PALS, A Program of the Minnesota State Colleges and Universities (507)389-1975 ala...@mn... "It's hard to lead a cavalry charge if you think you look funny on a horse" ~ Adlai Stevenson ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ VuFind-General mailing list VuF...@li... https://lists.sourceforge.net/lists/listinfo/vufind-general ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ VuFind-General mailing list VuF...@li... https://lists.sourceforge.net/lists/listinfo/vufind-general ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ VuFind-General mailing list VuF...@li... https://lists.sourceforge.net/lists/listinfo/vufind-general |
From: Demian K. <dem...@vi...> - 2012-02-27 13:58:31
|
The search results are rendered using the template at RecordDrivers/Index/result.tpl within your chosen theme. Here is the relevant block of code: {if $summAjaxStatus} <b>{translate text='Call Number'}:</b> <span id="callnumber{$summId|escape}">{translate text='Loading'}</span><br> <b>{translate text='Located'}:</b> <span id="location{$summId|escape}">{translate text='Loading'}</span> {elseif !empty($summCallNo)} <b>{translate text='Call Number'}:</b> {$summCallNo|escape} {/if} Essentially, if the driver is set up to support AJAX status, then it displays "loading" messages; otherwise, it displays just the call number inline. This is all controlled by RecordDrivers/MarcRecord.php. You could modify this method: public function getSearchResult($view = 'list') { global $interface; // MARC results work just like index results, except that we want to // enable the AJAX status display since we assume that MARC records // come from the ILS: $template = parent::getSearchResult($view); $interface->assign('summAjaxStatus', true); return $template; } Comment out the summAjaxStatus assignment in order to disable use of the real-time ILS driver (since in your situation there is no reason to use it). Then make some new assignments to make the holdings data available to the template, and modify the template to display the call number and location in the way you desire. Let me know if you need more details! - Demian > -----Original Message----- > From: Yongming Wang [mailto:wa...@tc...] > Sent: Friday, February 24, 2012 4:19 PM > To: Demian Katz > Cc: vufind-general vufind > Subject: Re: [VuFind-General] display holdings off-line (previous > translate_index_not_found(0)) > > Yeeeeeeees, after I added Demian's code snippet in > MarcRecord::getRealTimeHodlings(), it works!!!!!!!! > > Thank you so much, Demian! And thank you so much, Julia! > > It absolutely made my day! > > > Now, forgive my greediness. If I may ask: What should I do if I want the > location and call number information to come up on the search result page? > Right now that page still displays the fake location and call number from the > sample driver. How should I go about to make it happen? > > > Thanks very much. > > > Yongming > > > > --------------------------------- > Yongming Wang > Systems Librarian > The College of New Jersey Library > phone: 609-771-3337 > email: wa...@tc... > --------------------------------- > > ----- Original Message ----- > From: "Demian Katz" <dem...@vi...> > To: "Yongming Wang" <wa...@tc...>, "vufind-general vufind" <vufind- > ge...@li...> > Sent: Friday, February 24, 2012 12:35:14 PM GMT -05:00 US/Canada Eastern > Subject: RE: [VuFind-General] translate_index_not_found(0) > > Okay, that all makes sense. > > As you say, the translate_index_not_found is not the real problem -- it's just > a symptom you see during debug. You don't need to add the "Stacks" string > anywhere. The problem is not related to translating "Stacks" -- if the > "Stacks" value were getting to the correct place, you would have seen > "translate_index_not_found(Stacks)" instead of "translate_index_not_found(0)". > So the problem is figuring out why the translator is getting "0" when you > expect it to get "Stacks." > > Come to think of it, I'm pretty sure I see what is happening. The format > returned by getRealTimeHoldings is not the same format returned by the ILS > driver's getHolding method. getRealTimeHoldings uses the HoldLogic class to > rearrange the data so that it is keyed by location. So what seems to be > happening is you have a standard PHP array with numeric keys (0, 1, 2, 3...) > and VuFind is expecting string keys. Thus it tries to display a location > called "0". > > It's possible that some of this confusion has to do with VuFind code evolving > since Julia built her solution. Hopefully it's not too hard to fix. You > might just need to add this code to MarcRecord somewhere after your array is > built: > > global $configArray; > $hideHoldings = isset($configArray['Record']['hide_holdings']) > ? $configArray['Record']['hide_holdings'] : array(); > $holdings = array(); > if (count($result)) { > foreach ($result as $copy) { > $show = !in_array($copy['location'], $hideHoldings); > if ($show) { > $holdings[$copy['location']][] = $copy; > } > } > } > return $holdings; > > (this assumes that your array is called $results). > > - Demian > > ________________________________________ > From: Yongming Wang [wa...@tc...] > Sent: Friday, February 24, 2012 12:22 PM > To: vufind-general vufind > Subject: Re: [VuFind-General] translate_index_not_found(0) > > let me explain what I want to do: > > First of all, I don't have an ILS. So I use the Sample driver in config.ini. > > In all my MARC records, however, there is a 996 field whose subfield b > contains the item location information such as "Stacks", and whose 050 field > contains the call number. I want to display, on the holding tab, this location > and call number from my MARC records, instead of the fake ones from the sample > driver, which is always "3rd Floor Main Library and A1234.567." > > I read Julia Bauder's article from code4lib journal. She accomplished the > above - to display the location and call number from her MARC records - by > adding a getStatus($id) function in MarcRecord.php and modified the > getRealTimeHolding($patron = false) function in the same file. > > So I borrowed her codes from her article. But I couldn't make it to work. > > btw, when I use debug_backtrace() in I18N_Translator::translate(), there is so > much data that it blows out the browser! :-( > > Another thing I just noticed: > > the Translate_index_not_found() is not actually an error message. It appears > whenever the debug mode is on, and the content inside the () is the location > information. So when I put back the original MarcRecord.php, it has > translate_index_not_found(3rd Floor Main Library) displayed, the location from > the sample driver. > > > Maybe I should hard-code the "Stacks" location parameter in certain php file, > instead of the lang/en.ini file? I'm not sure. > > > > Thanks, > > > > Yongming > > --------------------------------- > Yongming Wang > Systems Librarian > The College of New Jersey Library > phone: 609-771-3337 > email: wa...@tc... > --------------------------------- > > ----- Original Message ----- > From: "Demian Katz" <dem...@vi...> > To: "Yongming Wang" <wa...@tc...>, "Alan Rykhus" <ala...@mn...> > Cc: "vufind-general vufind" <vuf...@li...> > Sent: Friday, February 24, 2012 10:45:34 AM GMT -05:00 US/Canada Eastern > Subject: RE: [VuFind-General] translate_index_not_found(0) error > > I'm not exactly sure what you are doing -- there is no MarcRecord::getStatus() > method in the trunk, so I'm assuming you're dealing with significantly > customized code... Without knowing more about the context, I can't really > speculate exactly what is happening... > > However, I can tell you that if you see Translate_index_not_found(0), that > means that someplace, the translate code was called on the value "0". The > text inside the parentheses is the exact string that was sent to the > translator... > > If that isn't enough of a clue to help you, try adding this code to the top of > I18N_Translator::translate() in web/sys/Translator.php: > > if ($phrase == 0) { > print_r(debug_backtrace()); > } > > This will put a whole bunch of data on the screen for you -- probably more > than you ever wanted to see -- but it will tell you which code called the > translator with the "0" value, and that might help you figure out what is > going on. debug_backtrace() is a very handy tool at times! > > - Demian > ________________________________________ > From: Yongming Wang [wa...@tc...] > Sent: Friday, February 24, 2012 10:36 AM > To: Alan Rykhus > Cc: vufind-general vufind > Subject: Re: [VuFind-General] translate_index_not_found(0) error > > Thanks Alan for your advise. > > I feel a little stupid though. I realize that I can simply use "echo" to do > that. And thank Alan for the print_r for printing the array value. Following > is the values of $holding[]: > > DEBUG: holdings = : Array > ( > [0] => Array > ( > [availability] => 1 > [status] => Available > [location] => Stacks > [reserve] => No > [callnumber] => E169.1 .N37 1973 > [duedate] => > [number] => 1 > ) > ) > > So the location does get "Stacks" from the 996 field, a very good sign. > > But why I still get "Translate_index_not_found(0)" error? > > Any suggestions? > > Thanks a lot. > > > > Yongming > > --------------------------------- > Yongming Wang > Systems Librarian > The College of New Jersey Library > phone: 609-771-3337 > email: wa...@tc... > --------------------------------- > > ----- Original Message ----- > From: "Alan Rykhus" <ala...@mn...> > To: "vufind-general vufind" <vuf...@li...> > Sent: Friday, February 24, 2012 10:09:17 AM GMT -05:00 US/Canada Eastern > Subject: Re: [VuFind-General] debugging - print out variable value > > Hello Yongming, > > I'm probably a little old fashioned on the debugging. But I open a file > and write to it. > > $fh = fopen("/tmp/testing", "a"); > fwrite($fh, "The value of locationstuff is: " . $locationstuff . "\n"); > fwrite($fh, "The value of thislocation is: " . $thislocation . "\n"); > > If the variable is an array you need to run it through print_r > > $tmp_var = print_r($holding, true); > fwrite($fh, "The value of holding is: " . $tmp_var . "\n"); > > al > > On Fri, 2012-02-24 at 09:24 -0500, Yongming Wang wrote: > > Dear VuFind Community, > > > > Is there a way to print out the variable value in debugging mode? This is > what I want to accomplish: > > > > I am trying to do what Julia Bauder did for her offline VuFind project. > Specifically, I want to display the location from my MARC record's 996 field > and call number from 050 field. I added the following codes to MarcRecord.php > (totally borrow it from Julia Bauder - a big thank you to Julia!): > > > > public function getStatus($id) > > { > > $callnumber = parent::getcallnumber(); > > if ($this->_getFirstFieldValue('090', array('a')) != NULL) { > > $parttwo = $this->_getFirstFieldValue('090', array('b')); > > $callnumber .= " " . $parttwo; > > } > > elseif ($this->_getFirstFieldValue('086', array('a')) != NULL) { > > $callnumber = $this->_getFirstFieldValue('086', array('a')); > > $parttwo = $this->_getFirstFieldValue('086', array('b')); > > $callnumber .= " " . $parttwo; > > } > > elseif ($this->_getFirstFieldValue('050', array('a')) != NULL) { > > $parttwo = $this->_getFirstFieldValue('050', array('b')); > > $callnumber .= " " . $parttwo; > > } > > $locationstuff = $this->marcRecord->getFields('996'); > > $thislocation = $locationstuff[0]->getSubfields('b'); > > foreach ($thislocation as $thislocationA) { > > $holding[] = array('availability' => 1, > > 'status' => 'Available', > > 'location' => $thislocationA->getData(), > > 'reserve' => 'No', > > 'callnumber' => $callnumber, > > 'duedate' => '', > > 'number' => 1); > > } > > return $holding; > > } > > > > And this is how my MARC record's 996 field looks like: > > 996 0 0 |b Stacks |h PS1331 .W3 1967 |a NJI |c library |n > 8846 |m 8176 > > > > I really want to see the values of $locationstuff and $thislocation on the > screen when I click the title to go to the record page, because right now I > got "translate_index_not_found(0)" error instead of "Stacks" as location on > the record page. I suspect that those variables get the values from the MARC > record. > > > > I added Stacks = "Stacks" to the end of lang/en.ini file but no use. > > > > How can I do that? or Can I do that? > > > > > > Thanks very much. > > > > > > > > Yongming > > > > --------------------------------- > > Yongming Wang > > Systems Librarian > > The College of New Jersey Library > > phone: 609-771-3337 > > email: wa...@tc... > > --------------------------------- > > > > ---------------------------------------------------------------------------- > -- > > Virtualization & Cloud Management Using Capacity Planning > > Cloud computing makes use of virtualization - but cloud computing > > also focuses on allowing computing to be delivered as a service. > > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > > _______________________________________________ > > VuFind-General mailing list > > VuF...@li... > > https://lists.sourceforge.net/lists/listinfo/vufind-general > > -- > Alan Rykhus > PALS, A Program of the Minnesota State Colleges and Universities > (507)389-1975 > ala...@mn... > "It's hard to lead a cavalry charge if you think you look funny on a > horse" ~ Adlai Stevenson > > > ------------------------------------------------------------------------------ > Virtualization & Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > VuFind-General mailing list > VuF...@li... > https://lists.sourceforge.net/lists/listinfo/vufind-general > > ------------------------------------------------------------------------------ > Virtualization & Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > VuFind-General mailing list > VuF...@li... > https://lists.sourceforge.net/lists/listinfo/vufind-general > > ------------------------------------------------------------------------------ > Virtualization & Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > VuFind-General mailing list > VuF...@li... > https://lists.sourceforge.net/lists/listinfo/vufind-general |