[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
rex_form // werte in 2. DB zusätzlich - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

rex_form // werte in 2. DB zusätzlich

22. Jun 2011, 14:48

Hi,
steh grad aufm ...

Würde gerne diverse Werte über die rex_form und checkboxen in
eine weitere DB schreiben. (m zu n) ... Nur ist mir der Weg mit der rex_form nicht ganz klar.

Code: Alles auswählen


$qry = "SELECT id, catname FROM ".$REX['TABLE_PREFIX']."9406_manufacturer_cats";
	$sql = new rex_sql();
	// $sql->debugsql = true;
	$sql->setQuery($qry);
	$cat_list = $sql->getArray();

    $form = new rex_form($REX['TABLE_PREFIX'].'9406_manufacturer',"Hersteller","manufacturer_id=".$manufacturer_id,"post",false);
	
// Dies hier soll mit der Hersteller id und der id der Kategorien in ein eigene DB "rex_m_c" (id, cat_id, manufacturer_id)
// geschrieben werden
	foreach($cat_list as $cat) {
		$field = &$form->addCheckboxField($cat['catname']);
		$field->setLabel($cat['catname']);
	}

    $field = &$form->addTextField('manufacturer',null,array('maxlength'=>64));
    $field->setLabel('Hersteller:');

    $field = &$form->addLinkmapField('article');
    $field->setLabel('<br/>Artikel:<div>&nbsp;<br/>&nbsp;</div>');

    $field = &$form->addTextField('link',null,array('maxlength'=>64));
    $field->setLabel('Externer Link:');

    if($func == 'edit') {
        $form->addParam('manufacturer_id', $manufacturer_id);
    }

    $form->show();
Jemand eine Idee?
Danke. grz. Chris

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

Re: rex_form // werte in 2. DB zusätzlich

22. Jun 2011, 16:18

Hi Chris,

dafür gibt es ein Extension-Point: REX_FORM_SAVED. Als Parameter wird array('form' => $this, 'sql' => $sql) übergeben, von dem du die Checkbox-Values auslesen kannst und entsprechend in eine andere Tabelle speichern kannst.

lg

Dave

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

22. Jun 2011, 20:17

Hey Deav,
danke. Sollte eigentlich helfen. Nur leider ist's n Rex 4.1 Projekt...
Durchsuchen hat leider keinen EP: REX_FORM_SAVED ausgespuckt...

hmm.. mal sehn ob s nen anderen Weg gibt.

Danke. grz. Chris

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

Re: rex_form // werte in 2. DB zusätzlich

22. Jun 2011, 20:36

Hi Chris,

wenn ich mich richtig daran erinnere, existiert das EP auch in 4.1, allerdings war der Name des EPs dynamisch.

z.B. REX_FORM_##REX_FORM_NAME##_SAVE

das folgende Schnipsel *sollte* funktionieren:

Code: Alles auswählen

function my_callback_function($params) {
  //...
  return true;
}

rex_register_extension('REX_FORM_'.$form->getName().'_SAVE','my_callback_function');
lg

Dave

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

24. Aug 2011, 15:10

Hi Dave,
jetzt muss ich doch nohcmal nachfrage bezgl des EPs.
Diesmal für die Redaxo 4.3.2:

Code: Alles auswählen

rex_register_extension_point('REX_FORM_SAVED', $saved, array('form' => $this, 'sql' => $sql));
Kannst du mir bitte an dem Code hier zeigen wie es geht:

Code: Alles auswählen

	$form = new rex_form('rex_9403_user','Login-Daten:', 'user_id='.$user_id);
	$form->debug = true;

	// user_name
	$field = &$form->addTextField('user_name');
	$field->setLabel("Benutzername:");
	
	// password
	$field = &$form->addTextField('password');
	$field->setLabel("Passwort:");
	
	$form->addFieldset('User-Daten:');
	// firstname
	$field = &$form->addTextField('first_name');
	$field->setLabel("Vorname:");
	
	// lastname
	$field = &$form->addTextField('last_name');
	$field->setLabel("Nachname:");
	
	$form->addFieldset('Benutzergruppe auswählen:');
	
	// Starndard Selectbox
	$field =& $form->addSelectField('group_id');
	// $field->setAttribute('multiple','multiple');
	$field->setLabel("Gruppe");
	$select =& $field->getSelect();
	$select->addSqlOptions("SELECT title, group_id FROM rex_9403_group");
/* Diser wert soll in die rex_9403_user_group (group_id) geschrieben werden */

	$form->show();

Es geht um dem Wert (group_id) der Selectbox.
Wie bekomm ich diesen nun über den EP in die 2. DB-Tabelle rex_9403_user_group
Danke schonmal. grz. Chris (voll aufm Schlauch steh!)

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

Re: rex_form // werte in 2. DB zusätzlich

24. Aug 2011, 18:34

Hi Chris:

here you go:

Code: Alles auswählen

function my_callback_function($params) {
	//echo '<pre>';
	//print_r($params);
	//echo '</pre>';
	
	// Irgendwo in $params befindet sich der Wert von group_id; -> musst du selber suchen, da ich Hunger habe und in die Kneipe gehe.. ;-)
	// Beispiel (ungetestet, wahrscheinlich inkorrekt): $params[0]['group_id'];
	$groupid = $params[0]['group_id'];
	$userid = $params[0]['user_id'];
	
	// viellicht hier erstmal die bestehenden Einträgen löschen.
	// ...
	
	// neue Einträge in die DB speichern.
	$sql = new rex_sql;
	$sql->setTable('rex_9403_user_group');
	$sql->setValue('groupid',$groupid);
	$sql->setValue('userid',$userid);
	$sql->insert();
	
	return true;
}

rex_register_extension('REX_FORM_SAVED','my_callback_function');

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

25. Aug 2011, 09:28

Hi, danke für die schnelle Hilfe ...
nur... in den PARAMS stehen:

Code: Alles auswählen

[params] => Array
        (
            [page] => securearea
            [subpage] => user
            [func] => add
            [list] => DESC
        )
irgendwie check ich die EPs und deren Func nicht..
Ich hab zwar jetzt ein riesen Array (form) jedoch schaff ichs (wirklich) nicht
mich da durchzuhangeln und die richtigen Werte rauszuholen...
wobei auch die group_id (Selected Options) leer ist ... *grmpf*

Code: Alles auswählen

Array
(
    [form] => rex_form Object
        (
            [name] => 787c66791885ff83d47739639ca776c9
            [tableName] => rex_9403_user
            [method] => post
            [fieldset] => Login-Daten:
            [whereCondition] => user_id=0
            [elements] => Array
                (
                    [Login-Daten:] => Array
                        (
                            [0] => rex_form_control_element Object
                                (
                                    [saveElement] => rex_form_element Object
                                        (
                                            [value] => Speichern
                                            [label] => 
                                            [tag] => input
                                            [table] => rex_form Object
 *RECURSION*
                                            [attributes] => Array
                                                (
                                                    [id] => rex_9403_user_Login-Daten__save
                                                    [type] => submit
                                                    [name] => Login-Daten__save
                                                )

                                            [separateEnding] => 
                                            [fieldName] => save
                                            [header] => 
                                            [footer] => 
                                            [prefix] => 
                                            [suffix] => 
                                            [notice] => 
                                        )

                                    [applyElement] => 
                                    [deleteElement] => 
                                    [resetElelement] => 
                                    [abortElement] => rex_form_element Object
                                        (
                                            [value] => Abbrechen
                                            [label] => 
                                            [tag] => input
                                            [table] => rex_form Object
 *RECURSION*
                                            [attributes] => Array
                                                (
                                                    [id] => rex_9403_user_Login-Daten__abort
                                                    [type] => submit
                                                    [name] => Login-Daten__abort
                                                )

                                            [separateEnding] => 
                                            [fieldName] => abort
                                            [header] => 
                                            [footer] => 
                                            [prefix] => 
                                            [suffix] => 
                                            [notice] => 
                                        )

                                    [value] => 
                                    [label] => 
                                    [tag] => 
                                    [table] => rex_form Object
 *RECURSION*
                                    [attributes] => Array
                                        (
                                        )

                                    [separateEnding] => 
                                    [fieldName] => 
                                    [header] => 
                                    [footer] => 
                                    [prefix] => 
                                    [suffix] => 
                                    [notice] => 
                                    [resetElement] => 
                                )

                            [1] => rex_form_element Object
                                (
                                    [value] => wer2345
                                    [label] => Benutzername:
                                    [tag] => input
                                    [table] => rex_form Object
 *RECURSION*
                                    [attributes] => Array
                                        (
                                            [id] => rex_9403_user_Login-Daten__user_name
                                            [class] => rex-form-text
                                            [type] => text
                                            [name] => Login-Daten_[user_name]
                                        )

                                    [separateEnding] => 
                                    [fieldName] => user_name
                                    [header] => 
                                    [footer] => 
                                    [prefix] => 
                                    [suffix] => 
                                    [notice] => 
                                )

                            [2] => rex_form_element Object
                                (
                                    [value] => 42323r
                                    [label] => Passwort:
                                    [tag] => input
                                    [table] => rex_form Object
 *RECURSION*
                                    [attributes] => Array
                                        (
                                            [id] => rex_9403_user_Login-Daten__password
                                            [class] => rex-form-text
                                            [type] => text
                                            [name] => Login-Daten_[password]
                                        )

                                    [separateEnding] => 
                                    [fieldName] => password
                                    [header] => 
                                    [footer] => 
                                    [prefix] => 
                                    [suffix] => 
                                    [notice] => 
                                )

                            [3] => rex_form_element Object
                                (
                                    [value] => rwer42352
                                    [label] => Vorname:
                                    [tag] => input
                                    [table] => rex_form Object
 *RECURSION*
                                    [attributes] => Array
                                        (
                                            [id] => rex_9403_user_Login-Daten__first_name
                                            [class] => rex-form-text
                                            [type] => text
                                            [name] => Login-Daten_[first_name]
                                        )

                                    [separateEnding] => 
                                    [fieldName] => first_name
                                    [header] => 
                                    [footer] => 
                                    [prefix] => 
                                    [suffix] => 
                                    [notice] => 
                                )

                            [4] => rex_form_element Object
                                (
                                    [value] => rewer
                                    [label] => Nachname:
                                    [tag] => input
                                    [table] => rex_form Object
 *RECURSION*
                                    [attributes] => Array
                                        (
                                            [id] => rex_9403_user_Login-Daten__last_name
                                            [class] => rex-form-text
                                            [type] => text
                                            [name] => Login-Daten_[last_name]
                                        )

                                    [separateEnding] => 
                                    [fieldName] => last_name
                                    [header] => 
                                    [footer] => 
                                    [prefix] => 
                                    [suffix] => 
                                    [notice] => 
                                )

                            [5] => rex_form_select_element Object
                                (
                                    [select] => rex_select Object
                                        (
                                            [attributes] => Array
                                                (
                                                    [name] => standard
                                                    [size] => 5
                                                )

                                            [options] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [0] => Test2
                                                                    [1] => 3
                                                                    [2] => 0
                                                                    [3] => Array
                                                                        (
                                                                        )

                                                                )

                                                            [1] => Array
                                                                (
                                                                    [0] => Test21223
                                                                    [1] => 5
                                                                    [2] => 0
                                                                    [3] => Array
                                                                        (
                                                                        )

                                                                )

                                                        )

                                                )

                                            [option_selected] => Array
                                                (
                                                )

                                        )

                                    [separator] => |
                                    [value] => 5
                                    [label] => Gruppe
                                    [tag] => 
                                    [table] => rex_form Object
 *RECURSION*
                                    [attributes] => Array
                                        (
                                            [id] => rex_9403_user_Login-Daten__group_id
                                            [class] => rex-form-select
                                            [name] => Login-Daten_[group_id]
                                        )

                                    [separateEnding] => 
                                    [fieldName] => group_id
                                    [header] => 
                                    [footer] => 
                                    [prefix] => 
                                    [suffix] => 
                                    [notice] => 
                                )

                        )

                )

            [params] => Array
                (
                    [page] => securearea
                    [subpage] => user
                    [func] => add
                    [list] => DESC
                )

            [mode] => add
            [sql] => rex_sql Object
                (
                    [values] => Array
                        (
                        )

                    [fieldnames] => Array
                        (
                            [0] => user_id
                            [1] => group_id
                            [2] => user_name
                            [3] => first_name
                            [4] => last_name
                            [5] => password
                            [6] => state
                        )

                    [table] => 
                    [wherevar] => 
                    [query] => SELECT * FROM rex_9403_user WHERE user_id=0 LIMIT 2
                    [counter] => 0
                    [rows] => 0
                    [result] => Resource id #225
                    [last_insert_id] => 
                    [debugsql] => 1
                    [identifier] => Resource id #61
                    [DBID] => 1
                    [error] => 
                    [errno] => 
                )

            [debug] => 1
            [applyUrl] => index.php?page=securearea&subpage=user&func=&list=DESC&form=787c66791885ff83d47739639ca776c9&
            [message] => 
            [errorMessages] => 
            [warning] => 
            [divId] => rex-addon-editmode
        )

    [sql] => rex_sql Object
        (
            [values] => Array
                (
                )

            [fieldnames] => Array
                (
                )

            [table] => 
            [wherevar] => 
            [query] => INSERT INTO `rex_9403_user` SET `user_name`='wer2345',`password`='42323r',`first_name`='rwer42352',`last_name`='rewer',`group_id`='5'
            [counter] => 0
            [rows] => 1
            [result] => 1
            [last_insert_id] => 38
            [debugsql] => 1
            [identifier] => Resource id #61
            [DBID] => 1
            [error] => 
            [errno] => 
        )

    [extension_point] => REX_FORM_SAVED
    [subject] => 1

Code: Alles auswählen

if ($func == 'edit' || $func == 'add')
{	
	echo '<div class="rex-addon-output">';
	$form = new rex_form('rex_9403_user','Login-Daten:', 'user_id='.$user_id);
	$form->debug = true;
	
	// user_name
	$field = &$form->addTextField('user_name');
	$field->setLabel("Benutzername:");
	
	// password
	$field = &$form->addTextField('password');
	$field->setLabel("Passwort:");
	
	$form->addFieldset('User-Daten:');
	// firstname
	$field = &$form->addTextField('first_name');
	$field->setLabel("Vorname:");
	
	// lastname
	$field = &$form->addTextField('last_name');
	$field->setLabel("Nachname:");
	
	$form->addFieldset('Benutzergruppe auswählen:');
	
// Selectbox
	$field = &$form->addSelectField('group_id');
	$field->setLabel("Gruppe");
	$select = &$field->getSelect();
	$select->addSqlOptions("SELECT title, group_id FROM rex_9403_group");
	
	rex_register_extension( 'REX_FORM_SAVED','my_callback_function');
	
	$form->show();
	echo '</div>';
}
irgendwie kapier ichs nicht (zu heiß ;)) ..
Danke. grz. Chris

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

23. Jul 2012, 16:56

Hi@all... muss das leider nochmal pushen, da ich momentan wieder
vor dem selben Problem stehe und nicht auf die PARAMS in der FORM komme.
Hab im Netz einen nützlichen Schnippsel gefunden der mir das Array etwas aufdröselt:

Code: Alles auswählen

foreach($params as $first_level_key => $value)
{
 foreach($value as $sub_key => $sub_value)
 {
  echo "\$array['".$first_level_key."']['".$sub_key."'] = '$sub_value'; \n";
 }
}
Somit erhalte ich nun:

Code: Alles auswählen

$array['form']['name'] = '95846fe696bf0d0cde9ccc264cd6200a';
$array['form']['tableName'] = 'rex_9410_my_projects';
$array['form']['method'] = 'post';
$array['form']['fieldset'] = 'Projektbeschreibung';
$array['form']['whereCondition'] = 'id=3';
$array['form']['elements'] = 'Array';
$array['form']['params'] = 'Array';
$array['form']['mode'] = 'edit';
Nur wenn ich dann per EP die PARAMS ($params['form']['params']) versuche
abzugreifen... kommt ne weiße Seite :roll:

Code: Alles auswählen

function saveTopProjectId($params)
{
	global $REX;
	
	$message = $params['subject'];
	$form_params   = $params['form']['params'];
	echo 'test > '. $form_params; // solltw enigstens Array kommen :/
}

rex_register_extension('REX_FORM_SAVED','saveTopProjectId');

Kann mir bitte jemand helfen. Danke.
grz. Chris

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

23. Jul 2012, 17:05

*grmpf* ... jedesmal wieder... $form = OBJECT ...
somit kommt man über die Methoden ran und nicht übers Array():

Code: Alles auswählen

$form = $params['form'];
$params = $form->getParams();
	
echo '<pre>';
print_r($params);
echo '</pre>';
sry.grz.Chris

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

23. Jul 2012, 17:15

Jemand trotzdem noch ne Idee wie man am besten
rex_form::preSave nutze kann, um vor dem endgültigen sichern in die DB,
diverse Werte an eine andere DB-Tabelle geben könnte.

Danke. grz. Chris

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: rex_form // werte in 2. DB zusätzlich

23. Jul 2012, 20:14

Hej Chris,

ist dein obiger Code noch aktuell?

Oder schreibe nochmal dein Form und die Arrays was der EP liefert.
Sozusagen noch einmal zusammenfassend für dein jetziges Projekt.

vg Thomas

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

24. Jul 2012, 08:31

Hallo Thomas,
der obenstenhende Code ist veraltet. Aber gleiches Prinzip.
Aus einer REX_FORM sollen Werte in eine 2. Datenbank (mit)gesichert werden.
Folgende Werte: id, art_id, categories

Form:

Code: Alles auswählen

// Article ID
  $field = &$form->addLinkmapField('art_id');
  $field->setLabel("CMS-Artikel");
    
  // Categories Multi-Selectbox
  $field =& $form->addSelectField('categories');
  $field->setAttribute('multiple','multiple');
  $field->setAttribute('size', '10');
  $field->setLabel("Projekt-Kategorien:");
  $select =& $field->getSelect();
  
  $qry = "SELECT cat_name, id FROM ".$REX['TABLE_PREFIX']."9410_projects_cat";
  $sql = rex_sql::factory();
  $cats = $sql->getArray($qry);
  foreach($cats as $cat)
  {
      	$select->addOption($cat['cat_name'],$cat['id']);
  }
in der config.inc.php der EP:

Code: Alles auswählen

rex_register_extension('REX_FORM_SAVED','saveTopProjectId');
in der functions.inc.php "func saveTopProjectId'()":

Code: Alles auswählen

function saveTopProjectId($params)
{

	global $REX;
	
	/*
	$array['form']['name'] = '95846fe696bf0d0cde9ccc264cd6200a';
	$array['form']['tableName'] = 'rex_9410_projects';
	$array['form']['method'] = 'post';
	$array['form']['fieldset'] = 'Projektbeschreibung';
	$array['form']['whereCondition'] = 'id=3';
	$array['form']['elements'] = 'Array';
	$array['form']['params'] = 'Array';
	$array['form']['mode'] = 'edit';
	*/
	
	$form = $params['form'];
	$params = $form->getParams();
	
	echo '<pre>';
	print_r($params);
	echo '</pre>';

/* Ausgabe:
Array
(
    [page] => ipro_projects
    [subpage] => 
    [func] => edit
    [list] => data
    [id] => 3
)
*/

}
Ich denke das ich hier eher über die Methode
preSave($fieldsetName, $fieldName, $fieldValue, &$saveSql) gehen sollte
und dort die Werte vor dem Speichern abfangen muss und in die 2te DB zu sichern:

Code: Alles auswählen

class my_rexform extends rex_form
{
  function preSave($fieldsetName, $fieldName, $fieldValue, &$saveSql)
  {
     return $fieldValue;
  }
}
 
Die Frage ist .. wie komm ich an all' die Werte und Params?
Danke schonmal im voraus. Grz. Chris

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: rex_form // werte in 2. DB zusätzlich

24. Jul 2012, 09:14

Hej,

so in die Richtung könnte es gehen:

Code: Alles auswählen

rex_register_extension('REX_FORM_SAVED','saveTopProjectId');

function saveTopProjectId($subject)
{
  // Die Felder die du speichern willst
  $my_fields = array('id', 'art_id', 'categorie');
  $my_values = array();
  
  $form = $subject['form'];
  
  $elements = $form->getFieldsetElements();
  foreach($elements as $fieldsetName => $fieldsetElements)
  {
    foreach($fieldsetElements as $field)
    {
      if (in_array($field->getFieldName(), $my_fields))
      {
        $my_values[$field->getFieldName()] = $field->getValue();
      }
    }
  }
/*  
  echo '<pre style="text-align: left">';
  print_r($my_values);
  echo '</pre>';
*/
  if (count($my_values) >= 1)
  {
    // 2 = DBID 2 -> Datenbankverbindung fuer 2te DB in master.inc.php hinterlegen
    $sql = new rex_sql(2);
    $sql->setTable('DEINE TABELLE');
    $sql->setValues($my_values);
    $sql->insert();
  }
}
vg Thomas

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

24. Jul 2012, 09:35

boa.. und ich kämpf hier mit der Methode save():

Code: Alles auswählen

class my_rexform extends rex_form
{

function save()
{

	// print_r($this->getParams());
	// print_r(parent::getParams());
	
	$params     = $this->getParams();
	$page       = $params['page'];
	$subpage    = $params['subpage'];
	$project_id = $params['id'];
	
	$qry = "SELECT * FROM rex_9410_projects WHERE id =$project_id";
	$sql = rex_sql::factory();
	$sql->setQuery($qry);
	
	$project_id = $sql->getValue('id');
	$art_id     = $sql->getValue('art_id');
	$categories = $sql->getValue('categories');
		
	$cats = substr($categories, 1, -1);
	$cats = explode('|', $cats);
	
	/* Vorher mal sicherheitshalber die Tabelle leeren (id= projekt id) */	
	
	foreach($cats as $cat)
	{
		$sql = rex_sql::factory();
		$sql->setTable("rex_9410_projects_top");
		$sql->debugsql = true;
		
		$sql->setValue('cat_id', $cat);
		$sql->setValue('art_id', $art_id);
		$sql->setValue('project_id', $project_id);
		$sql->insert();
	}
	
	if(($result = parent::save()) === true)
	{
		$result = rex_info('Daten wurden in 2te DB gesichert!');
	}
	return $result;

}
}
vorallem das hier.. ist mir irgendwie noch n Dorn im Auge:

Code: Alles auswählen

$cats = substr($categories, 1, -1);
$cats = explode('|', $cats);
Ich mach das nur um ein"ordentliches" Array zu bekommen... grmpf (heut steh ich absolut aufm Schlauch, sry)

Danke. grz. Chris

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: rex_form // werte in 2. DB zusätzlich

24. Jul 2012, 10:18

Hej,

hast du das obige Script ausprobiert?

einfach oben in deine Datei schreiben.

vg Thomas

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

24. Jul 2012, 10:24

yo.. hab ich.. funzt einwandfrei... DANKE!
Nur drösel ich in der DB das Array mit den categories auf
und sichere es jeweils in eine DB Zeile, nur ob das so gewollt ist:

Code: Alles auswählen

$cats = substr($my_values['categories'], 1, -1);
$cats = explode('|', $cats);
momentan siehts so aus:

Code: Alles auswählen

function saveTopProjectId($subject)
{
  // Die Felder die du speichern willst
  $my_fields = array('project_id', 'art_id', 'categories');
  $my_values = array();
 
  $form = $subject['form'];
  
  $params  = $form->getParams();
  $elements = $form->getFieldsetElements();
  
  $my_values['project_id'] = $params['id'];
 
  foreach($elements as $fieldsetName => $fieldsetElements)
  {
    foreach($fieldsetElements as $field)
    {
       if (in_array($field->getFieldName(), $my_fields))
      {
        $my_values[$field->getFieldName()] = $field->getValue();
      }
    }
  }
  
  $cats = substr($my_values['categories'], 1, -1);
  $cats = explode('|', $cats);
  
  if (count($my_values) >= 1)
  {
  	### vorher DB mit project id saeubern
  	$sql = new rex_sql();
  	$sql->setTable('9410_projects_top');
  	$sql->debugsql = true;
  	$sql->setWhere('project_id = '.intval($my_values['project_id']));
  	
  	if($sql->getRows())
  	{
  		$sql = rex_sql::factory();
  		$sql->setTable("rex_9410_projects_top");
  		$sql->setWhere('project_id = '.$my_values['project_id']);
  		$sql->delete();
  		
  		if ($sql->delete())
  		{
  			foreach($cats as $cat)
  			{
  				$sql = rex_sql::factory();
  				$sql->setTable("rex_9410_projects_top");
  				$sql->debugsql = true;
  				$sql->setValue('cat_id', $cat);
  				$sql->setValue('art_id', $my_values['art_id']);
  				$sql->setValue('project_id', $my_values['project_id']);
  				$sql->insert();
  			}
  		}
  	} else {
   		foreach($cats as $cat)
  		{
  			$sql = rex_sql::factory();
  			$sql->setTable("rex_9410_projects_top");
  			$sql->debugsql = true;
  			$sql->setValue('cat_id', $cat);
  			$sql->setValue('art_id', $my_values['art_id']);
  			$sql->setValue('project_id', $my_values['project_id']);
  			$sql->insert();
  		}
  	}
  }
}
das vorher säubern gefältt mir eigentlich auch ned so.. aber denke
das es hier keinen anderen Weg gibt, um sicher zu gehend as nichts doppelt
gesichert wird ...

grz. Chris

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: rex_form // werte in 2. DB zusätzlich

24. Jul 2012, 10:46

darwin hat geschrieben: das vorher säubern gefältt mir eigentlich auch ned so.. aber denke
das es hier keinen anderen Weg gibt, um sicher zu gehend as nichts doppelt
gesichert wird ...
Musst du sogar so machen. Sonst können sich Leichen sammeln.

Das $sql->delete() kannst einmal löschen. Da Einträge gefunden wurden würde ich auf das if löschen und direkt mit der Schleife beginnen.

vg Thomas

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

25. Okt 2012, 11:24

Hi,
muss/soll/kann man dem EP "REX_FORM_SAVED" irgendwo das Form als id oder name des Forms mit angeben. Ich habe jetzt das "Phänomen", das im ImageManager beim anlegen eines Bildtyps nun meine funktion aus dem anderen AddOn aufgerufen wird ... :oops: :shock:

der EP-Aufruf liegt in der config.inc.php des AddOns:

Code: Alles auswählen

rex_register_extension('REX_FORM_SAVED','saveCatalogTitleImage');
oder sollte der eher in der /pages/catalogs.inc.php (also die rex-form) platziert
werden?

Danke. grz. Chris

Benutzeravatar
Gregor.Harlan
Entwickler
Beiträge: 1130
Registriert: 4. Jun 2007, 10:35
Wohnort: Frankfurt am Main

Re: rex_form // werte in 2. DB zusätzlich

25. Okt 2012, 11:56

darwin hat geschrieben:oder sollte der eher in der /pages/catalogs.inc.php (also die rex-form) platziert
werden?
So ist es ;)

Gruß, Gregor
Friends Of REDAXO: Gemeinsame REDAXO-Entwicklung!

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

6. Nov 2012, 17:23

hmmm.
soweit funzt alles. Danke nochmal.

Nur wie komme ich z.B. an die ID (Datenbank ID) ran.
Der EP "REX_FORM_SAVED" liefert mir ja alle Form Elemente.
Jetzt bräuchte ich noch die ID des (neuen) Datensatzes der gespeichert wurde.
Gibts da ne Möglichkeit ...

Code: Alles auswählen

if($form->save()) { #qry zum holen der lastID }  


Vorhaben:
Ich speicher nen Datensatz mit der rex_form und kopiere/rename dabei eine Datei
auf dem Server um ... dazu würd ich gern die ID des jeweiligen Datensatzes mit ranhängen

id_meinedatei_1.jpg

Code: Alles auswählen

function saveCatalogTitleImage($subject)
{
    global $REX;
    
     $my_fields = array('id','file');
     $my_values = array();
     $form = $subject['form'];
     $params  = $form->getParams();
     $elements = $form->getFieldsetElements();
     
     foreach($elements as $fieldsetName => $fieldsetElements)
     {
         foreach($fieldsetElements as $field)
         {
             if (in_array($field->getFieldName(), $my_fields))
             {
                 $my_values[$field->getFieldName()] = $field->getValue();
             }
         }
     }

     
         $file     = $REX['HTDOCS_PATH'].'files/pdf/'.$my_values['file']. '/files/pages/large/1.jpg';
         $new_file = $REX['HTDOCS_PATH'].'files/pdf_image/'.$params['id'].'_'.$my_values['file'].'_1.jpg';
         if(!file_exists($new_file))
         {
             copy($file, $new_file) or die("Unable to copy $file to $new_file.");
         }
     
}
rex_register_extension('REX_FORM_SAVED', 'saveCatalogTitleImage');
Danke. grz. Chris

Benutzeravatar
Gregor.Harlan
Entwickler
Beiträge: 1130
Registriert: 4. Jun 2007, 10:35
Wohnort: Frankfurt am Main

Re: rex_form // werte in 2. DB zusätzlich

6. Nov 2012, 17:32

Hi,

probier mal $form->getSql()->getLastId(). Das wird wenn aber nur wirklich beim Hinzufügen klappen, nicht beim Ändern. Da müsstest du aber ja auch anders an die ID kommen.

Gruß, Gregor
Friends Of REDAXO: Gemeinsame REDAXO-Entwicklung!

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

Re: rex_form // werte in 2. DB zusätzlich

7. Nov 2012, 14:03

Hi Gregor,
leichter gesagt als getan ...
ich geh nun einen anderen Weg und hänge einfach den createdate (Timestamp) ran.
Somit sollte das Bild/die Datei eigentlich auch unique sein ;).

Aber dennoch würds mich interessieren, wie du das gelöst hättest mit der ID (beim Anlegen).


Danke. grz. Chris

Zurück zu „Allgemeines [R4]“