.. include:: ../../Includes.txt .. _tutorial9_extensionOverview: ================== Extension Overview ================== Edit the extension `sav_library_example9 `_ in the SAV Library Kickstarter to get an overview. It contains one form with three conventional **List**, **Single** and **Edit** views. There is nothing special in the **List** view. Edit View ========= Two subforms are used to input the graph data. Even if another choice was possible for the field **graph1**, the use of a subform makes it possible to use similar queries for the graph. - The subform **graph1** is configured to allow the input of one item. It is used to input the number of sunny, cloudy and rainy day in the month. - the subform **graph2** is used to enter the minimal and maximal temperature for a given day. Note the field attributes used to add a delete button and up and down buttons in front of each item. :: addDelete = 1; addUpDown = 1; Single View =========== The type of the field **graph** is :ref:`Graph `. Its configuration includes the following properties. :: cutLabel = 1; graphTemplate = typo3conf/ext/sav_library_example9/Resources/Private/Templates/Charts.xml; allowQueries = 1; tags = marker#uidQueryGraph1 = 1, marker#uidQueryGraph2 = 2, marker#uidMainTable = ###uidMainTable###, ; Analyze the graph template **Charts.xml** provided in the folder **Resources/Private/Templates** of the extension. The markers **marker#uidQueryGraph1** and **marker#uidQueryGraph2** are used in the definition of the query manager. You could have to modify the value 1 and 2 as explained in the next section. The marker **marker#uidMainTable** takes the value of the current **uid** of the main table, i.e. **tx_savlibraryexample9**. This value is always available by means of the marker **###uidMainTable###**. :: ... Queries ======= Add two Sav Charts queries in backend list mode. The following caption shows the result with queries inserted in the **Data** folder. .. figure:: ../../Images/Tutorial9CreateSavChartsQueries.png Fill the query **Query Graph 1** as shown below. .. figure:: ../../Images/Tutorial9SavChartsQuery1.png The subforms used for the field **graph1** and **graph2** generates relations n:n. Therefoe, the **FROM** clause joins the tables **tx_savlibraryexample9**, **tx_savlibraryexample9_graph1_mm** and **tx_savlibraryexample9_graph1**. :: tx_savlibraryexample9 INNER JOIN tx_savlibraryexample9_graph1_mm ON tx_savlibraryexample9.uid = tx_savlibraryexample9_graph1_mm.uid_local INNER JOIN tx_savlibraryexample9_graph1 ON tx_savlibraryexample9_graph1_mm.uid_foreign = tx_savlibraryexample9_graph1.uid The **WHERE** clause retricts the records to the one used by the **Single** view. The marker **###uidMainTable###** does the job. :: tx_savlibraryexample9.uid = ###uidMainTable### Fill the query **Query Graph 2** by replacing respectively **tx_savlibraryexample9_graph1** and **tx_savlibraryexample9_graph1_mm** by **tx_savlibraryexample9_graph2** and **tx_savlibraryexample9_graph2_mm**. .. important:: The uid of the Sav Charts queries should be 1 and 2. However, if you do have already enter other Sav Charts queries their uid will be different. You can modify the values in the **tags** property of the field **graph** in the **Singe** view and regenerate the extension. You may also change the configuration using the :ref:`field configuration `, for example at the extension level. The following TypoScript sets the values of the markers **marker#uidQueryGraph1** and **marker#uidQueryGraph2** respectively to 3 and 4. :: plugin.tx_savlibraryexample9_pi1.Default.singleView.fields.graph.tags ( marker#uidQueryGraph1 = 3, marker#uidQueryGraph2 = 4, marker#uidMainTable = ###uidMainTable### ) Enter data in the frontend as shown below. .. figure:: ../../Images/Tutorial9FrontendInput.png Save, and go to the frontend. .. figure:: ../../Images/ScreenshotsExample9SingleView.png