[Vtigercrm-developers] BUG -> in vtiger 6.1 SVN 14176 (hardcoded callback in listview search and sort_by)

Rishab K rishab.k at vtiger.com
Thu Aug 7 06:02:22 GMT 2014


Thanks Istavan,

List view search and Sort are both Ajax operations.I would suggest you have
a look and debug under List.js of
/vtiger_root/layouts/vlayout/modules/Vtiger/resources/List.js

Function to look out for:
getListViewRecords
registerHeadersClickEvent
registerListSearch

Check for what is the return of  jQuery("#module").val() on the list view
of your module.

Regards,
Rishab


On Wed, Aug 6, 2014 at 7:19 PM, Holbok István <holbok at gmail.com> wrote:

>  Hi Rishab,
>
> Your last email helps much.
> Debugging the function getTemplatePath($templateName,$module)  in
> /vtiger_root/includes/runtime  I have realized that in case of *sort by
> or search clicking* to the header the *$module variable is empty*, in
> other case the $module variable contains the CustomModule name.
> My ListViewContents.tpl is attached and also attached the
> MyMultiselectField.php
>
> It looks like the variable *$MODULE_NAME*  in the ListViewContents.tpl is
> unset after clicking to the listview header search or sort_by.
>
> I uses parent (e.g. vtiger) *list.php* to prepare the data for the
> template.
>
> Regrads:
> *István*
>
>
>  2014.08.06. 14:30 keltezéssel, Rishab K írta:
>
> I tried to reproduce this on my instance in both cases(search and sort)
> the template location I get is
>
>
> */var/www/vtiger_root/includes/runtime/../../layouts/vlayout//modules/CustomModule/uitypes/MyCustomMultiSelectFieldSearchView.tpl*
>
>
>  In viewer.php under /vtiger_root/include/runtime in
> function getTemplatePath($templateName,$module) look for what is the path
> returned.
>
>  Can you share your ListViewContents.tpl and MyCustomMultiselectField.php
>
>
> On Wed, Aug 6, 2014 at 4:07 PM, Holbok István <holbok at gmail.com> wrote:
>
>>  Hi Rishab,
>>
>> It was exactly done before my letter.
>> And today morning I went through again all the steps.
>>
>> And it works, except by clicking search or sort on the header of the
>> listview table.
>>
>> At the normal list view vtiger uses the overrided Function
>> getListSearchTemplateName() from the
>> /modules/CustomModule/uitypes/MyCustomPicklist.php
>> It is easy to control turning on the debug function and putting a
>> $log->debug('I am here :-) '); row to the function overrided Function
>> getListSearchTemplateName().
>>
>> When I am going to the listview the call of overrided Function
>> getListSearchTemplateName() happened and it return the necessary
>> 'uitypes/MyMultiSelectFieldSearchView.tpl' string, and it parsed well.
>>
>> When I am clicking to* a header field to sort by record_id*, the call of
>> overrided Function getListSearchTemplateName() happened again and it return
>> the necessary  'uitypes/MyMultiSelectFieldSearchView.tpl' string as well,
>> but in this case the *string parsed wrong* and vtiger looks for the
>> template in the Vtiger directory instead of the CustomModule layout
>> directory.
>> It is also checked. Copying the template from the CustomModule layout
>> directory to the Vtiger layout directory the error message did not appear.
>>
>> So there should be a directory parse bug inside somewhere.
>>
>> regards:
>> Istvan
>>
>>
>>
>>  2014.08.06. 11:10 keltezéssel, Rishab K írta:
>>
>> I meant in your case Override the Function *getListSearchTemplateName()* of
>> /layouts/vlayout/uitypes/Base.php in
>> your
>>
>>
>> */modules/CustomModule/uitypes/ *
>>
>>  *or add *
>>
>>  * public function getListSearchTemplateName() {         return
>> 'uitypes/MyMultiSelectFieldSearchView.tpl '; *
>> *    }*
>>
>>  In your MyCustomPicklist.php under
>>
>>  */modules/CustomModule/uitypes/*
>>
>>
>> On Wed, Aug 6, 2014 at 1:06 PM, Holbok István <holbok at gmail.com> wrote:
>>
>>>  Dear Rishab,
>>>
>>> Thank you very much for the support.
>>> May my English was not enough good to explain my findings.
>>>
>>> I am using overrided *ListViewContents.tpl* under
>>> /layouts/vlayout/modules/CustomModule/ and the template works well.
>>> I have just included a line before the red below:
>>>
>>>
>>>  {*include
>>> file=vtemplate_path($FIELD_UI_TYPE_MODEL->getListSearchTemplateName(),$MODULE_NAME*
>>> )
>>>                     FIELD_MODEL= $LISTVIEW_HEADER
>>> SEARCH_INFO=$SEARCH_DETAILS[$LISTVIEW_HEADER->getName()]
>>> USER_MODEL=$CURRENT_USER_MODEL}
>>>
>>>  {$FIELD_UI_TYPE_MODEL->getListSearchTemplateName()}  to write out to
>>> the screen the template names used in different column.
>>>
>>> In the custom multipicklist column was listed the right template name:
>>> *uitypes/MyMultiSelectFieldSearchView.tpl*
>>> And this template name is defined by the
>>> .../modules/CustomModule/uitypes/MyMultipicklist.php  with overriding the
>>> Function *getListSearchTemplateName()* for that uitype only.
>>>
>>> The template name is OK, vtiger find in any case the *right template
>>> name*, but in sort and search vtiger looking for this right name in the
>>> wrong directory.
>>>
>>> I did the suggested ovveride in the modules/Vtiger/uitypes/Base.php ->
>>> modules/CustomModule/uitypes/Base.php
>>>
>>> BUT when clicking to the listview header to sort the columns e.g. by
>>> Record Label the too same error appeared.
>>>
>>> The vtiger looking for the right template name in the incorrect
>>> directory.
>>> The right directory will be:
>>> *.../layouts/vlayout/modules/CustomModule/uitypes/*
>>>
>>> vtiger looking for the right template name in the
>>> *.../layouts/vlayout/modules/Vtiger/uitypes/*
>>>
>>> So overriding the Function *getListSearchTemplateName()* in the
>>> modules/Vtiger/uitypes/Base.php is not a right solution.
>>> Even the Function *getListSearchTemplateName()* in the
>>> modules/Vtiger/uitypes/Multipicklist.php is already overrided in it works -
>>> generates the right name.
>>>
>>> My opinion is that the .../modules/Vtiger/models/ListView.php fails
>>> inside the function getListViewHeaders() or in function
>>> getListViewEntries($pagingModel).
>>> query_generator or listview_controller
>>>
>>> Do the these entities manipulate the templates somewhere?
>>>
>>>
>>> Regards:
>>> *István*
>>>
>>>
>>>
>>>  2014.08.06. 8:30 keltezéssel, Rishab K írta:
>>>
>>>
>>>
>>>> It indicates the sort_by and search javascript functions on the
>>>> listview screen use a hardcoded path to the templates and did not use the
>>>> callback to the CustomModule directory.
>>>> Unable to load template file '
>>>> *modules/Vtiger/uitypes/MyMultiSelectFieldSearchView.tpl*' in '
>>>> *modules/**CustomModule/ListViewContents.tpl*'
>>>
>>>
>>>  Istavan,
>>>
>>>  The template name of ListViewSearch and Sort is not hard coded.
>>>
>>>  In ListViewContents.tpl under /layouts/vlayout/modules/Vtiger/
>>> around line 80,81
>>>
>>>  {*include
>>> file=vtemplate_path($FIELD_UI_TYPE_MODEL->getListSearchTemplateName(),$MODULE_NAME*
>>> )
>>>                     FIELD_MODEL= $LISTVIEW_HEADER
>>> SEARCH_INFO=$SEARCH_DETAILS[$LISTVIEW_HEADER->getName()]
>>> USER_MODEL=$CURRENT_USER_MODEL}
>>>
>>>  The above line marked in red loads the Template file for the
>>> respective FieldUitype.
>>>
>>>  So in your case Override the Function *getListSearchTemplateName() *of
>>> /layouts/vlayout/uitypes/Base.php
>>> to serve your purpose.
>>> Please review.
>>>
>>>  Regards,
>>> Rishab
>>>
>>>
>>> On Mon, Aug 4, 2014 at 10:08 PM, Holbok István <holbok at gmail.com> wrote:
>>>
>>>>  Dear vtiger Team,
>>>>
>>>> As per Rishab's suggestion of 07/22 I have created a custom UIType
>>>> (special multiselect picklist) for my custom module.
>>>>
>>>> I have created:
>>>>
>>>> *.../layouts/vlayout/modules/CustomModule/uitypes/MyMultiSelectFieldSearchView.tpl*
>>>> and
>>>> *.../layouts/vlayout/modules/CustomModule/uitypes/MyMultiPicklist.tpl*
>>>> and did the necessary modification for my purposes.
>>>>
>>>> I have also created the necessary service files:
>>>> *.../modules/**CustomModule/uitypes/MyMultipicklist.php*  and
>>>> *.../modules/**CustomModule/models/Field.php*  to serve the template
>>>> with data.
>>>>
>>>> The class *CustomModule**_Field_Model* extends *Vtiger_Field_Model*
>>>> and class *CustomModule**_MyMultipicklist_UIType* extends
>>>> *Vtiger_Base_UIType* .
>>>>
>>>> With rewriting the display related methods in the above mentioned 2
>>>> classes the custom UIType field started work in my custom module.
>>>> The listview, the detailvew and the editview also showed the necessary
>>>> field data in the necessary display format.
>>>>
>>>> The listview loaded the template from the file
>>>> ".../layouts/vlayout/modules/CustomModule/uitypes/MyMultiSelectFieldSearchView.tpl"
>>>> and the detailview and editview loaded the template from the
>>>> ".../layouts/vlayout/modules/CustomModule/uitypes/MyMultiPicklist.tpl".
>>>>
>>>> *But clicking* to the header of the listview to get sort by some field
>>>> or search by some field (does not matter what was the search field) I have
>>>> received a template error:
>>>>
>>>> Unable to load template file '
>>>> *modules/Vtiger/uitypes/MyMultiSelectFieldSearchView.tpl*' in '
>>>> *modules/**CustomModule/ListViewContents.tpl*'
>>>>
>>>> Copying file
>>>> '.../layouts/vlayout/modules/CustomModule/uitypes/MyMultiSelectFieldSearchView.tpl'
>>>> to the directory
>>>> '.../modules/Vtiger/uitypes/MyMultiSelectFieldSearchView.tpl' the template
>>>> error resolved.
>>>>
>>>> It indicates the sort_by and search javascript functions on the
>>>> listview screen use a hardcoded path to the templates and did not use the
>>>> callback to the CustomModule directory.
>>>>
>>>>
>>>> --
>>>> üdvözlettel:
>>>>
>>>> *Holbok István*
>>>>
>>>> +3670-342-0900
>>>> *e-mail:* holbok at gmail.com
>>>> *SkyPe:* holboki
>>>>
>>>>
>>>> _______________________________________________
>>>> http://www.vtiger.com/
>>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.vtigercrm.com/pipermail/vtigercrm-developers/attachments/20140807/7fcde362/attachment-0001.html>


More information about the vtigercrm-developers mailing list