You are not logged in.

CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

1

Saturday, July 14th 2012, 7:00pm

Textfeld als Select Optionen verwenden

Ich wollte nur mal schnell nachfragen, ob bzw. wie es möglich ist, den Inhalt einer Option (Textfeld) im ACP als select option zu verwenden.
zb. ich hab im ACP den Inhalt der Box :

Source code

1
2
3
1.0
1.1
1.2


Und als Ergebnis dann

HTML

1
2
3
4
5
                          <select name="serveros" id="serveros">
                              <option value="1">1.0</option>
                              <option value="2">1.1</option>
                              <option value="3">1.2</option>
                            </select>
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

This post has been edited 1 times, last edit by "CybroX" (Jul 14th 2012, 11:52pm)


2

Sunday, July 15th 2012, 5:38pm

meinst du für die xml-dateien?
<optiontype>select</optiontype> ?


<selectoptions ><![CDATA[
1:sprachvariable.1
2:sprachvariable.2
3:sprachvariable.3
]] ></selectoptions >
Meine Woltlab-Plugins
- Tooltip
- LiveChat
- Ani-BBCode
- Facebook

CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

3

Sunday, July 15th 2012, 10:42pm

Ich meine so wie du die Präfixe der einzelnen Foren festlegst.

Du schreibst im ACP in einem Textfeld pro Zeile ein Präfix und jedes Präfix ist für den User dann ja eine Option beim erstellen des Beitrags.
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

4

Monday, July 16th 2012, 5:21am

und was genau kannst du nicht?
das verarbeitest du einfach mit php, kannst ja durch zeilenumbrüche splitten/exploden und dann mit einer forschleife abarbeiten... verstehe ich dich irgendwie falsch?
ist das eher eine php-frage?
Meine Woltlab-Plugins
- Tooltip
- LiveChat
- Ani-BBCode
- Facebook

CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

5

Monday, July 16th 2012, 10:35am

Ich hab mir das mal mit den Rängen angeschaut.

Source code

1
{foreach from=$ranks item=rank}


Ok, foreach ist klar und $rank ist das QuellArray.
Aber was macht der Parameter Item ?

Ich hab extern mal eine Testfunktion geschrieben

PHP Source code

1
2
3
4
5
6
7
8
function loadFormOptions($property)
    {
        $sql mysql_query("SELECT `optionValue` FROM `wcf1_option` WHERE `optionName` = 'mcsupport_".$property."'");
        $res mysql_fetch_row($sql);
        return $res[0];
    }
    
    $systems explode("\n"loadFormOptions('systems'));


Und das funktionier aus soweit schonmal, Ausgabe :

Source code

1
Array ( [0] => 1.0 [1] => 1.1 [2] => 1.2 )


Aber eben, wie genau setzte ich das jetzt im TPL um.


btw. Glückwunsch zu 1000 Beiträgen ;)
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

This post has been edited 1 times, last edit by "CybroX" (Jul 16th 2012, 12:02pm)


6

Monday, July 16th 2012, 12:53pm

Source code

1
{foreach from=$ranks item=rank}


Ok, foreach ist klar und $rank ist das QuellArray.
Aber was macht der Parameter Item ?
[...]
Aber eben, wie genau setzte ich das jetzt im TPL um.

Wenn ich richtig verstehe, was du meinst, dann wäre dies wohl in etwa so:

PHP Source code

1
2
3
4
5
<select name="serveros" id="serveros">
{foreach from=$ranks item=rank}
    <option value="{$rank['id']}">{$rank['value']}</option>
{/foreach}
</select>

Die entsprechende Ansprache muss natürlich angepasst werden, ich bind avon ausgegangen das eine Spalte das Ergebnis-Arrays $ranks eine ID ist und die andere ein Wert (value).

Der Parameter "item" der foreach-Schleife von $ranks ordnet der Variable (hier "$rank") jedem Schleifendurchlauf die aktuelle Zeile zu.
In deinem Fall ist $rank also im ersten Durchlauf [0] => 1.0, im zweiten [1] => 1.1 usw.

lg

CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

7

Monday, July 16th 2012, 1:00pm

Wenn ich richtig verstehe, was du meinst, dann wäre dies wohl in etwa so:

PHP Source code

1
2
3
4
5
<select name="serveros" id="serveros">
{foreach from=$ranks item=rank}
    <option value="{$rank['id']}">{$rank['value']}</option>
{/foreach}
</select>



Exakt.
Heisst das, wenn sich der Parameter "item" ja auf die Indexzahl bezieht, dass der in jeder Abfrage "rank" ist, oder versteh ich das falsch ?
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,735

Location: Berlin

  • Send private message

8

Monday, July 16th 2012, 1:00pm

Ok, foreach ist klar und $rank ist das QuellArray.
Aber was macht der Parameter Item ?

Template source code

1
2
3
{foreach from=$iterator item=$value}
{* oder *}
{foreach from=$iterator key=$key item=$value}

Das ist nichts anderes als das bekannt foreach()-Konstrukt aus PHP:

PHP Source code

1
2
3
foreach ($iterator as $value)
/* oder */
foreach ($iterator as $key => $value)
Alexander Ebert
Developer WoltLab® GmbH


CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

9

Monday, July 16th 2012, 1:04pm

:pinch:
Danke Alexander, ich hab wieder mal viel zu weit überlegt...

Kleiner Nachtrag noch, woher wird das Array geladen, reicht es wenn ich in der Klasse sage

PHP Source code

1
$array machDasArrayFunktion()
?
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

This post has been edited 1 times, last edit by "CybroX" (Jul 16th 2012, 2:02pm)


10

Monday, July 16th 2012, 2:05pm

Die Frage verstehe ich nicht, aber ich vermute mal "ja" :D
Du musst die Variable lediglich dem template übergeben (assign).
Wie du sie befüllst ist egal - nur für foreach muss es min. ein zweidimensionales Array sein (z.B. durch die getResultList()-Methode bei Datenbankabfragen.

lg

CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

11

Monday, July 16th 2012, 2:17pm

ah ja, das hab ich völlig vergessen, jetzt erscheint alles Logisch :D
jetzt muss ich nur noch die schöne WBB-Interne Funktion finden die verwendet wird um alle gefundenen Zeilen auszugeben und dann sollts klappen =)
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,735

Location: Berlin

  • Send private message

12

Monday, July 16th 2012, 2:56pm

Wie du sie befüllst ist egal - nur für foreach muss es min. ein zweidimensionales Array sein (z.B. durch die getResultList()-Methode bei Datenbankabfragen.

Genauer gesagt, muss es nur ein Iterator sein (deswegen habe ich auch $iterator als Variable verwendet): http://de.php.net/manual/en/language.oop5.iterations.php (Arrays implementieren auch einen Iterator)

jetzt muss ich nur noch die schöne WBB-Interne Funktion finden die verwendet wird um alle gefundenen Zeilen auszugeben und dann sollts klappen =)

Was soll diese ominöse Funktion denn machen?
Alexander Ebert
Developer WoltLab® GmbH


13

Monday, July 16th 2012, 3:02pm

jetzt muss ich nur noch die schöne WBB-Interne Funktion finden die verwendet wird um alle gefundenen Zeilen auszugeben und dann sollts klappen =)

Bei einer Datenbankabfrage schau dir mal WCF::getDB()->getResultList() an.

CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

14

Monday, July 16th 2012, 4:51pm

Exactly !
Danke euch.
Das letzte was ich noch hab ist eine kleine Frage und zwar, die Fehlermeldung "Angegebene Seite wurde nicht gefunden ... ... ..." erscheint nur wenn ich sie explizit aufrufe, bei jedem anderen (PHP-bedingten) Fehler bekomme ich einen FatalError vom WBB ErrorHandler ooder ?
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

15

Monday, July 16th 2012, 5:31pm

Du bekommst immer einen Fatal Error (oder dergleichen), außer du wirfst eine entsprechende Exception des WCFs - wobei die Fehlermeldung "angegebene Seite nicht gefunden..." und ähnliche Fehlermeldungen auch durch das WCF geworfen werden können, z.b. wenn es die Klasse nicht gibt. Die Exception muss also nicht von dir selbst geworfen werden ;)

lg

CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

16

Tuesday, July 17th 2012, 10:40am

So, ich habs jetzt soweit geschafft, dass das Formular alle nötigen Optionen ausliest, die Formulardaten ausliest, alles prüft und verarbeitet und dann einen Beitrag schreibt.

Allerdings sind noch kleine Fragen offen :
- Wenn ich das so mache, bekommt der User keinen Beitrag "gutgeschrieben", gibt es.. oder ich frag direkt so : welche Funktion bzw. Klasse beinhaltet die Funktion den Beitragszähler eines Users zu inkrementieren ?

- Ich sehe nicht ganz ein, wieso gibt es bei vielen Formularen Captchas nur wenn der User nicht angemeldet ist ? Ich mein angemeldet kann man ja auch spammen...

- Gibt es ein Beispiel im WBB oder ein Tutorial dazu, wie man mit AJAX ein Textfeld ausblenden kann, wenn man einen anderen Radiobutton als de Standardbutton auswählt ?
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

This post has been edited 1 times, last edit by "CybroX" (Jul 17th 2012, 12:02pm)


CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

17

Thursday, July 19th 2012, 10:37pm

#push - weiss gar nicht mehr, ist das hier erlaubt ?

Die erste Frage hat sich gelöst. Fehlen noch Nummer 2 & 3 ;)
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.

Alexander Ebert

WoltLab Developer

  • "Alexander Ebert" is male

Posts: 4,735

Location: Berlin

  • Send private message

18

Thursday, July 19th 2012, 10:52pm

- Ich sehe nicht ganz ein, wieso gibt es bei vielen Formularen Captchas nur wenn der User nicht angemeldet ist ? Ich mein angemeldet kann man ja auch spammen...

Captchas dienen einzig und alleine nur zur Abwehr von automatisierten Spammern. Inzwischen werden die Captchas direkt von Menschen gelöst und dann hindert einem ein Captcha in anderen Formularen auch nicht daran, irgendetwas zu machen.

- Gibt es ein Beispiel im WBB oder ein Tutorial dazu, wie man mit AJAX ein Textfeld ausblenden kann, wenn man einen anderen Radiobutton als de Standardbutton auswählt ?

Was hat das mit AJAX zu tun, das ist doch durch einen simplen click-Listener (change ist beim IE buggy) möglich.
Alexander Ebert
Developer WoltLab® GmbH


nmichel

Member

Posts: 498

Occupation: Bitschieber

  • Send private message

19

Thursday, July 19th 2012, 10:55pm

nur mal zu (3) - ich hab's mal so gemacht (abgeschaut ;) )

Je nach Eingabe in der SelectBox werden bestimmte Felder mittles Aufruf setFieldTypeID() ein- und ausgeblendet:

Template source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
...
<script type="text/javascript">
	//<![CDATA[
	
	function setFieldTypeID(newTypeID) {
		switch (newTypeID) {
			case 'text': 
				showOptions('shLength');
				hideOptions('shOptions');	
				break;
			case 'integer':  
				hideOptions('shLength');
				hideOptions('shOptions');	
				break;
			...
		}
	}
	onloadEvents.push(function() { setFieldTypeID('{$fieldType}'); });
	//]]>
</script>
..
		<div class="formElement">
			<div class="formFieldLabel"><label for="fieldType">{lang}wcf.acp.thindb.fieldType{/lang}</label></div>
			<div class="formField">
				{if $action=='add'}
				<select {if $action == 'edit'}disabled{/if} id="fieldType" name="fieldType" onchange="setFieldTypeID(this.options[this.selectedIndex].value)">
					{htmloptions options=$fieldTypes selected=$fieldType disableEncoding=true}
				</select>
				{else}
					<p>{$fieldTypes.$fieldType}</p>
				{/if}
			</div>
		</div>
		<script type="text/javascript">//<![CDATA[
			inlineHelp.register('fieldType');
		//]]></script>
		..
		<div class="formElement" id="shLength">
			<div class="formFieldLabel"><label for="fieldLength" id="lbLength">{lang}wcf.acp.thindb.fieldLength{/lang}</label></div>
			<div class="formField {if $errorField == 'fieldLength'} formError{/if}">
				<input type="text" class"inputText" id="fieldLength" name="fieldLength" value="{$fieldLength}" style="width:60px;" maxLength="7" />
					...
				{/if}
			</div>
		</div>
		<div class="formElement" id="shOptions">
			<div class="formFieldLabel"><label for="fieldOptions" id="lbOptions">{lang}wcf.acp.thindb.fieldOptions{/lang}</label></div>
			<div class="formField {if $errorField == 'fieldOptions'} formError{/if}">
				<input type="text" class"inputText" id="fieldOptions" name="fieldOptions" value="{$fieldOptions}" style="width:100%;" maxLength="80" />
				{if $errorField == 'fieldOptions'}
					...
				{/if}
			</div>
		</div>
..
Der Kopf ist rund, damit das Denken die Richtung wechseln kann (Francis Picabia)

CybroX

Member

  • "CybroX" is male
  • "CybroX" started this thread

Posts: 1,066

Location: Schweiz

Occupation: Elektroniker

  • Send private message

20

Friday, July 20th 2012, 11:24pm

Danke, ich werds mir morgen mal ansehen.
Grüsse CybroX
Offiziell inaktiv ~ Alle Aussagen veraltet.