vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB5 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=263)
-   -   Make array usable in template (https://vborg.vbsupport.ru/showthread.php?t=326943)

delicjous 12-07-2018 03:40 AM

If you use a new API like ARR, make it your own API and don't extend it.
You could extend API like Page, Node, User... but why your own?!

PHP Code:

 <?php

if (!defined('VB_ENTRY')) {
    die(
'Access denied.');
}

class 
TestImportArray_Api_Arr extends vB_Api
{

    public static function 
getArray($prevResult)
    {
        return [
1,2,3,4];
    }
}

HTML Code:

{vb:data userIds, testimportarray:arr, getArray}
{vb:debugvardump $userIds}

There is a working example-mod here: https://vbulletin.org/forum/showthre...light=skeleton

BulliM 12-07-2018 03:55 AM

Quote:

Originally Posted by shka (Post 2597682)
...

It works like a charm. Thank you shka! Thank to all!

--------------- Added [DATE]1544164891[/DATE] at [TIME]1544164891[/TIME] ---------------

One problem left. Why I cannot use that array in a condition?

Code:

{vb:data arrayofuserids, arr, getArray}
{vb:debugvardump $arrayofuserids}

Result:

HTML Code:

var_dump: $arrayofuserids

array(4) {
  [0]=>
  string(2) "1
"
  [1]=>
  string(4) "2
"
  [2]=>
  string(2) "3
"
  [3]=>
  string(1) "4"
}


But...

Code:

{vb:data arrayofuserids, arr, getArray}
<vb:if condition="in_array($conversation['userid'], $arrayofuserids)">...</vb:if>

...works not.

Solved. My solution:

PHP Code:

return "1,2,3,4"

Code:

{vb:data arrayofuserids, arr, getArray}
{vb:set userIds, {vb:php explode, ',', {vb:raw arrayofuserids.0}}}
<vb:if condition="in_array($conversation['userid'], $userIds)">...</vb:if>

Works, but isn't quite elegant. If there is a better way, I would be interested in. I want that array of userids also global. No need, to load on every post.

shka 12-07-2018 05:06 AM

Von hinten durch die Brust :D

BulliM 12-07-2018 05:08 AM

Quote:

Originally Posted by shka (Post 2597693)
Von hinten durch die Brust :D

Ja, voll. Die vB-Templates nerven ganz sch?n. Das dauert noch, bis ich das kann.

delicjous 12-07-2018 06:53 AM

Dein Array-Inhalt sind strings. Du ben?tigst aber int.

PHP Code:

return array(1,2,3,4); 

liefert mir

HTML Code:

var_dump: $array

array(3) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(4)
}

und dann funktioniert es.

HTML Code:

<vb:if condition="in_array($user['userid'], $array)">
Yes
<vb:else />
No
</vb:if>

Deine Funktion sollte public function und nicht public static function sein.

BulliM 12-07-2018 06:57 AM

Quote:

Originally Posted by delicjous (Post 2597695)
Dein Array-Inhalt sind strings. Du ben?tigst aber int.

Die Vermutung hatte ich auch. Ich lade das Array aber aus einer Datei. Will nicht jedesmal neu aus der DB laden. Bei mir lautet die Zeile also return file('path/file'); wo vorher die userids untereinander standen und jetzt als eine Zeile, durch Kommas getrennt. Diesen ganzen Aufwand k?nnte ich mir sparen, wenn ich die Tabelle in der Foren-DB anlegen w?rde. Da ?berlege ich noch, weil ich Sicherheitsbedenken habe.

shka 12-07-2018 07:00 AM

I think the problem with his first try is - his strings are two chars (with \n ?)

He wrotes

PHP Code:

array(4) {
  [
0]=>
  
string(2"1
"
  
[1]=>
  
string(4"2
"
  
[2]=>
  
string(2"3
"
  
[3]=>
  
string(1"4"


String 0..2 are incorrect so in_array results false, only last strinf is of correct length string(1)

delicjous 12-07-2018 07:35 AM

Quote:

Originally Posted by BulliM (Post 2597696)
Die Vermutung hatte ich auch. Ich lade das Array aber aus einer Datei. Will nicht jedesmal neu aus der DB laden. Bei mir lautet die Zeile also return file('path/file'); wo vorher die userids untereinander standen und jetzt als eine Zeile, durch Kommas getrennt. Diesen ganzen Aufwand k?nnte ich mir sparen, wenn ich die Tabelle in der Foren-DB anlegen w?rde. Da ?berlege ich noch, weil ich Sicherheitsbedenken habe.

Naja, wenn die IDs aus einer Datei kommen werden diese wohl weniger oft gewechselt. Dann solltest Du die wie aufgezeigt ?ber eine API ziehen. Ich glaube nicht, das es sicherer ist die IDs in einer Datei zu "generieren" (woher auch immer) und diese Datei dann in die API einzubinden. Warum sollte ein Datenbankzugriff unsicher sein? Wenn dieser korrekt eingerichtet ist, sollte das definitiv die bessere L?sung sein.


All times are GMT. The time now is 08:50 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01200 seconds
  • Memory Usage 1,749KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (3)bbcode_code_printable
  • (4)bbcode_html_printable
  • (4)bbcode_php_printable
  • (4)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (8)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete