2017-03-15 8 views
0

Ich habe dieses Projekt zum Hinzufügen von inline troc Verwaltung mit Drupal 8.Ändere Seite in Drupal 8

Wenn ich einige Daten ändern möchte, habe ich einige Probleme.

Ich möchte die Standardseite verlassen, weil ich die Liste auf dieser Seite nicht erreichen kann.

Gibt es eine Möglichkeit, den Standardmodus zu umgehen?

+0

Willkommen bei SO. Geben Sie weitere Informationen zu dem Problem an, mit dem Sie konfrontiert sind, z. B. die Protokollierung des Stacks und das, was Sie bisher versucht haben. –

+0

Ich habe ein benutzerdefiniertes Modul namens 'ajout-troc' erstellt, das einen neuen Knoten namens 'troc' erstellt und als Controller habe ich diese php-Datei erstellt, die sehr gut funktioniert (ich weiß nicht, wie ich sie hochladen soll). Und jetzt möchte ich den Benutzer den bereits erstellten Knoten bearbeiten lassen und ich weiß nicht, wie es geht. Ich habe eine Bearbeitungsseite von drupal, aber ich möchte sie anpassen. – Nawres

Antwort

0

Hier ist mein Platzhalter-Code:

namespace Drupal\ajout_troc\Form; 
use Drupal\Core\Form\FormBase; 
use Drupal\Core\Form\FormStateInterface; 
use Drupal\Component\Utility\UrlHelper; 
use Drupal\node\Entity\Node; 
use \Drupal\file\Entity\File; 

class ContributeForm extends FormBase { 

    public function getFormId() { 
     return 'ajout_troc_contribute_form'; 
    } 

    public function extractRubriqueOptions() { 
     $terms = \Drupal::service('entity_type.manager') 
      ->getStorage("taxonomy_term") 
      ->loadTree('rubrique', $parent = 0, $max_depth = NULL, $load_entities = FALSE); 
     $options = array(); 
     foreach($terms as $term) { 
      $options[$term->tid] = $term->name; 
     } 
     return $options; 
    } 
    public function buildForm(array $form, FormStateInterface $form_state) { 

     $form['rubrique'] = array(
      '#type' => 'select', 
      '#title' => t('Rubrique'), 
      '#options' => $this->extractRubriqueOptions(), 
      '#required' => TRUE, 
     ); 
     $form['titre'] = array(
      '#type' => 'textfield', 
      '#title' => t('Titre du bien'), 
      '#required' => TRUE, 
     ); 
     $form['description'] = array(
      '#type' => 'textarea', 
      '#title' => t('Description détaillée'), 
      '#required' => TRUE, 
     ); 
     $form['telephone'] = array(
      '#type' => 'tel', 
      '#title' => t('Téléphone'), 
      '#required' => TRUE, 
     ); 
     $form['valeur'] = array(
      '#type' => 'number', 
      '#title' => t('Valeur à la vente'), 
     ); 
     $form['annee'] = array(
      '#type' => 'number', 
      '#title' => t('Année de fabrication'), 
     ); 
     $form['photo'] = array(
      '#type' => 'managed_file', 
      '#title' => t('Photo'), 
      '#upload_location' => 'public://images/', 
      '#required' => TRUE, 
     ); 
     $form['label'] = array(
      '#type' => 'label', 
      '#title' => t('Ce que vous souhaitez en échange'), 
     ); 
     $form['echange'] = array(
      '#type' => 'select', 
      '#title' => t('Sélectionnez les rubriques qui vous intéressent : '), 
      '#multiple' => true, 
      '#options' => $this->extractRubriqueOptions(), 
      '#required' => TRUE, 
     ); 
     $form['descriptionechange'] = array(
      '#type' => 'textarea', 
      '#title' => t('Décrivez ici ce que vous souhaitez en échange :'), 
     ); 

     $form['actions'] = array('#type' => 'actions'); 
     $form['actions']['submit'] = array(
      '#type' => 'submit', 
      '#value' => t('Enregistrer mon annonce'), 
      '#attributes' => array('class' => array('button', 'button--primary', 'js-form-submit', 'form-submit')) 
     ); 
     return $form; 
    } 

    public function validateForm(array &$form, FormStateInterface $form_state) { 

     if (strlen($form_state->getValue('telephone'))!=8) { 
      $form_state->setErrorByName('telephone', $this->t("Le numéro de téléphone doit contenir 8 chiffres.")); 
     } 
    } 


    public function submitForm(array &$form, FormStateInterface $form_state) 
    { 
     $user = \Drupal::currentUser(); 

     $fields = array(
      'type' => 'troc', 
      'title' => 'Annonce', 
      'status' => 0, 
      'created' => REQUEST_TIME, 
      'changed' => REQUEST_TIME, 
      'uid' => $user->id(), 
      'field_rubrique' => array(
       'target_id' => $form_state->getValue('rubrique') 
      ), 
      'field_titre' => array(
       'value' => $form_state->getValue('titre') 
      ), 
      'field_description' => array(
       'value' => $form_state->getValue('description') 
      ), 
      'field_telephone' => array(
       'value' => $form_state->getValue('telephone') 
      ), 
      'field_valeur' => array(
       'value' => $form_state->getValue('valeur') 
      ), 
      'field_annee' => array(
       'value' => $form_state->getValue('annee') 
      ), 
      'field_descriptionechange' => array(
       'value' => $form_state->getValue('descriptionechange') 
      ), 
     ); 
     $echanges = $form_state->getValue('echange'); 
     foreach ($echanges as $echange) { 
      $fields['field_echange'][] =array(
       'target_id' => $echange 
      ); 
     } 
     $photoFid = $form_state->getValue('photo'); 
     if(!empty($photoFid[0])) { 
      $photoFid = $photoFid[0]; 
      $photo = \Drupal\file\Entity\File::load($photoFid); 
      $photo->setPermanent(); 
      $photo->save(); 
      $fields['field_photo'] = array(
       'target_id' => $photoFid, 
      ); 
     } 
     $node = Node::create($fields); 
     $node->save(); 
    } 
} 

Für mehr Infos, hier ist Screenshot für die Schnittstelle. Ich möchte das "Rubrique" Feld eine Liste auswählen, weil ich einige Optionen habe und ich will die user frei fühlen und wählen Sie seine beste Option. Der Link unten ist der Screenshot.

Image link

+0

Warum trennen Sie Frage mit Code? Studieren Sie, wie Sie eine bessere Frage im Stackoverflow schreiben. –

+0

Entschuldigung, dies ist mein erstes Mal im Stackoverflow. – Nawres

+0

Ich habe den Code zu Ihrer Frage bearbeitet, so dass Sie diese Antwort jetzt löschen können. – coderade