Modulschalter

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Modulschalter

Beitrag von chris1278 »

Also ich habe für eine meiner Extension jetzt soweit alles vprbereitet für Schalter übers acp zu schalten.

Die schalter an sich tun auch das was sie sollen, hier mal ein schalter um den es geht:

Code: Alles auswählen

<dt><label for="switch_3_enable">{{ lang('SWITCH_3_ENABLE') }}{{ lang('COLON') }}</label><br /><span>{{ lang('SWITCH_3_ENABLE_EXPLAIN') }}</span></dt>
			<dd>
				<label><input type="button" class="button" name="switch_3_enable" value="false"<!-- IF SWITCH_3_ENABLE --> id="switch_3_enable" checked="checked"<!-- ENDIF --> /> false </label>
				<label><input type="button" class="button" name="switch_3_enable" value="true"<!-- IF not SWITCH_3_ENABLE --> id="switch_3_enable" checked="checked"<!-- ENDIF --> /> true </label>
				<dd><label type="text" name="revolvermaps_widget" id="revolvermaps_widget" maxlength="255" size="40" value="{SWITCH_3_ENABLE}"  /></dd>
			</dd>
		</dl>
		
Dieser schalter schreibt je nach dem entweder true oder false in den datenbank eintrag. dies funktioniert soweit auch. wird auch in der listener korrekt ausgelesen und in die template variable übernommen.

Das problem ist folgendes.

Ich habe den Code für den Schalter im Adminbereich einfach genommen der für eine JA/Nein abfrage steht also der normalerweise 1 oder 0 in die datenbank schreibt. und habe einfach die 1 bzw. die 0 durch true und false ersetzt und das funktioniert auch. Die werte werden wie gesagt korrekt in die db geschrieben und auch weiter im style template korrekt angewendet. nur die anzeige im Adminbereich ändert den wert nicht also sprich der punkt bleibt immer bei dem selben wert erhalten.

Was müsste man ändern oder welche infos braucht ihr noch um mir bei dem problem zu helfen.

Hier noch anbei so wie ich den Schalter in dem Modul eingebunden habe:

Code: Alles auswählen

if ($submit)
		{
			if (!check_form_key('acp_xxx'))
			{
			trigger_error($this->user->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING);
			}
			$this->chris1278_config->set('switch_1_enable', $this->request->variable('switch_1_enable', ''));
			$this->chris1278_config->set('switch_2_enable', $this->request->variable('switch_2_enable', ''));
			$this->chris1278_config->set('switch_3_enable', $this->request->variable('switch_3_enable', ''));
			trigger_error($this->user->lang['OIC_COOKIE_UPDATE'] . adm_back_link($this->u_action));
		}

			$template->assign_vars(array(
			'SWITCH_1_ENABLE'							=> $this->chris1278_config['switch_1_enable'],
			'SWITCH_2_ENABLE'							=> $this->chris1278_config['switch_2_enable'],
			'SWITCH_3_ENABLE'							=> $this->chris1278_config['switch_3_enable'],
			'U_ACTION'									=> $this->u_action,
		));
Benutzeravatar
Crizzo
Administrator
Administrator
Beiträge: 11954
Registriert: 19.05.2005 21:45
Kontaktdaten:

Re: Modulschalter

Beitrag von Crizzo »

hi,

warum hast du denn die id="switch_3_enable" auch in der Abfrage? Der "NEIN"-Input braucht keine ID.

Wenn dein Wert aus der Datenbank nicht übernommen wird, ist dein "Checked" nicht korrekt: https://github.com/phpbb-de/phpbb-ext-t ... s.html#L22 oder du rufst es in deiner acp_module -Datei nicht richtig ab: https://github.com/phpbb-de/phpbb-ext-t ... le.php#L85 bzw. weißt es nicht der richtigen Template-Variable zu: https://github.com/phpbb-de/phpbb-ext-t ... e.php#L105

Grüße

PS: Wieso hast du das umgestellt zu true/false von 1/0? :-?
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Modulschalter

Beitrag von chris1278 »

Also crizzo der wert wird bei dem einen schalter mit true und mit dem anderen schalter auf false in die db geschrieben das funktioniert. nur der punkt bleibt eben immer bei dem selben wert egal ob in der db true oder false steht. das problem tritt nur in der moduldatei im adminbereich auf. im style template wird dann der korekte wert ausgelesen und übernommmen das funktioniert.

Umgestellt hab ich deswegen da ich den schalter false oder true so per sprachvariable in die config.js des klaro scriptes gebe. nun mus ich nur den wert via acp halt in die tabelle schreiben.

Das wollte ich halt anstelle eines textfeldes mit einem schalter machen. weil eine 1 oder eine 0 nutzt mich in dem fall nix.
Zuletzt geändert von chris1278 am 12.01.2021 12:52, insgesamt 1-mal geändert.
Benutzeravatar
Crizzo
Administrator
Administrator
Beiträge: 11954
Registriert: 19.05.2005 21:45
Kontaktdaten:

Re: Modulschalter

Beitrag von Crizzo »

Du brauchst dafür diesen Teil:

Code: Alles auswählen

{% if ACP_TOU_USE_CUSTOM_TOU_ENABLED %}checked="checked"{% endif %}
in deinen inputs und da muss dann natürlich ACP_TOU_USE_CUSTOM_TOU_ENABLED auch in deiner *_module.php korrekt beschrieben werden, wie ich es hier mache:

Code: Alles auswählen

$this->template->assign_vars(array(
					'ERRORS'								=> $error,
					'U_ACTION'								=> $this->u_action,

					'ACP_TOU_VERSION_VALUE'					=> $this->config['tou_version'],
					'ACP_TOU_USE_CUSTOM_TOU_ENABLED'		=> $this->config['tou_use_custom_tou'],
					'ACP_TOU_USE_CUSTOM_PP_ENABLED'			=> $this->config['tou_use_custom_pp'],
				));
machst du das so?
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Modulschalter

Beitrag von chris1278 »

In der Moduldatei steht der schalter so drin.

im template abschnitt:

'SWITCH_3_ENABLE' => $this->chris1278_config['switch_3_enable'],

weil die Variable in der Tabell heist switch_3_enable Wobei die nachher geändert wird. bin erst mal mit einer am testen.
Benutzeravatar
Crizzo
Administrator
Administrator
Beiträge: 11954
Registriert: 19.05.2005 21:45
Kontaktdaten:

Re: Modulschalter

Beitrag von Crizzo »

Was ist denn das hier: $this->chris1278_config? Wieso nicht $this->config?
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Modulschalter

Beitrag von chris1278 »

Das ist meine Tabelle da ich die schalter alles in eine eigene tabelle anlege.

hier die tabelle :

Code: Alles auswählen

public function update_schema()
	{
		return array(
			'add_tables'		=> array(
			$this->table_prefix . 'optin'	=> array(
					'COLUMNS'		=> array(
						'chris1278_name'				=> array('VCHAR:255', ''),
						'chris1278_value'				=> array('VCHAR:255', ''),
						'is_dynamic'				=> array('BOOL',  0),
					),
					'PRIMARY_KEY'	=> array('chris1278_name'),
					'KEYS'			=> array(
						'is_dynamic'			=> array('INDEX', 'is_dynamic'),
					),

				),
			)
		);
	}
Das ganze funktioniert so wie die config tabelle allerdings nur mit meienr eigeen tabelle. die habe ich der config tabelle nachgebaut. Mike on tour hat mir dann die handler dafür geschrieben. Diese tabelle kann ich genau so beschreiben wie die config nur die variablen sind anders aber funktioniert identisch.

Das problem ist wie beid er ext mit den social icons da habe ich soviel in die config geschriebendas man mir zu einer eigenen tabelle geraten hat. und da bei der extension um die es sich hier geht auch um mehrere schalter handelt habe ich direkt in eine eigene tabelle geschrieben. die variablen kann ich für alle meine extensions nutzen und die tabelle kann ich für jede ext anders nennen.

Ich kann dir die Ext. mal gerne zukommen lassen dann kannst du dir das mal anschauen.
Benutzeravatar
Crizzo
Administrator
Administrator
Beiträge: 11954
Registriert: 19.05.2005 21:45
Kontaktdaten:

Re: Modulschalter

Beitrag von Crizzo »

Dann zeig mir mal deine komplette *_module.php oder gleich die ganze Extension. Kann ja gut sein, dass da ein Fheler ist dein handler nicht funkioniert.

Und sehe in der Tabelle auch nicht, wo deine configs-values sein sollen.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Modulschalter

Beitrag von chris1278 »

Du hast pn. Also die sache funktioniert schon imlistener und auch im acp modul. Mit den normalen ja nein schaltern. Ich denke für die werte true oder false mus man da etwas anders abfragen in der modul datei für. aber ich komm nicht drauf.

Also die beiden Core dateien für die variablen chris1278_config basieren auf der datei phpbb/config/config.php und auf der phpbb/config/db.php natürlcih aller werte angepasst damit kein konflikt mit der original config variable ensteht. das hat den vorteil man kann chris1278_config genau so verwenden wie config.

und crizzo natürlich heist config_value in der tabelle chris1278-value so wie config_name dort chris1278_name heist.
Benutzeravatar
Crizzo
Administrator
Administrator
Beiträge: 11954
Registriert: 19.05.2005 21:45
Kontaktdaten:

Re: Modulschalter

Beitrag von Crizzo »

Also das funktioniert wohl deshalb nicht, weil da kein boolscher Wert in der DB steht:

Code: Alles auswählen

 false true Aktueller Wert: klarotestcokiedbeintrag 
was von hier kommt:

Code: Alles auswählen

Aktueller Wert: <td>{SWITCH_3_ENABLE}</td>
Kurzum: deine zusätzliche Tabelle kaputt oder falsch oder beides. Damit kann der IF-Teil nicht funkionieren.

Deine Beschriftung ist im ACP auch umgekehrt, checked wird beim true angewendet, benannt ist es "false".

Notiz: die phpBB-Config-Tabelle ist dafür da config-Werte aufzunehmen, ich kann mir nicht vorstellen, dass du die mit deiner config-Tabelle validiert und genehmigt bekommst, wenn du sie auf phpBB.com einreichst.

Grüße

PS: Zudem ist es total verwirrend, wenn du eine Tabelle phpbb_optin anlegst mit einer Extension namens: chris1278/cookie :wink:
Antworten

Zurück zu „Extension Bastelstube“